导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→请教:关于STC89C51单片机解码UPD6121G的问题

* 7784: 请教:关于STC89C51单片机解码UPD6121G的问题

   Kiven216 
Kiven216发表的帖子 

 请教:关于STC89C51单片机解码UPD6121G的问题
我现在调试一个红外键盘,现在买到upd6121g芯片的遥控器,用stc89c51单片机(和at的语言指令一模一样)解码的时候,始终没有成功。我用的解码程序是这样的:
org 0000h 
ajmp main;转入主程序
org 0003h ;外部中断p3.2脚int0入口地址 
ajmp int ;转入外部中断服务子程序(解码程序)
         
;以下为主程序进行cpu中断方式设置
main:setb ea ;打开cpu总中断请求
     setb it0 ;设定int0的触发方式为脉冲负边沿触发
     setb ex0 ;打开int0中断请求
;以下对单片机的所有引脚进行初始化,全部设置成高电平
     mov p1,#11100111b
     ajmp $
;以下为进入p3.2脚外部中断子程序,也就是解码程序
int: clr ea ;暂时关闭cpu的所有中断请求
     mov r6,#10
sb:  acall ys1;调用882微秒延时子程序
     jb p3.2,exit;延时882微秒后判断p3.2脚是否出现高电平如果有就退出解码程序
     djnz r6, sb;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
     jnb p3.2, $ ;等待高电平避开9毫秒低电平引导脉冲
     acall ys2 ;延时4.74毫秒避开4.5毫秒的结果码
     mov r1,#1ah ;设定1ah为起始ram区
     mov r2,#4 
     pp: mov r3,#8
     jjjj: jnb p3.2,$;等待地址码第一位的高电平信号
     lcall ys1;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
     mov c,p3.2;将p3.2引脚此时的电平状态0或1存入c中
     jnc uuu;如果为0就跳转到uuu
     lcall ys3
uuu: mov a,@r1;将r1中地址的给a
     rrc a;将c中的值0或1移入a中的最低位
     mov @r1,a;将a中的数暂时存放在r1中
     djnz r3,jjjj;接收地址码的高8位
     inc r1;对r1中的值加1,换下一个ram
     djnz r2,pp ;接收完16位地址码和8位数据码和8位数据反码,存放在1ah/1bh/1ch/1dh的ram中
     mov p1,1dh;将按键的键值通过p1口的8个led显示出来!
     clr p2.0;蜂鸣器鸣响-嘀嘀嘀-的声音,表示解码成功
     lcall ys3
     lcall ys3
     lcall ys3
     setb p2.0
exit:setb ea ;允许中断
;退出解码子程序
ys1: mov r4,#20 ;延时子程序1,精确延时882微秒
     d1: mov r5,#20
     djnz r5,$
     djnz r4,d1 
ret
ys2: mov r4,#10 ;延时子程序2,精确延时4740微秒
     d2: mov r5,#235
     djnz r5,$
     djnz r4,d2 
ret
ys3: mov r4,#2;延时程序3,精确延时1000微秒
     d3:mov r5,#248
     djnz r5,$
     djnz r4,d3
ret 
end
 
 
在实验板上的结果总是,第4,5两个led亮,按下遥控板时,只是只是第三个数码管闪一下(证明p3.2,红外接受正常)。但是led没有任何变化,蜂鸣器(p2.0)也没有任何反应。 不知道这是怎么回事。自己觉得好像中断没有起到作用???
望回复,谢谢!!!!!!!!!!!!!!!!!!


发表时间:2007年7月21日12:46:21

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:请电子高手 帮忙看下这个图了 谢谢请电子高手 帮忙看下这个图了&nbs
[下一篇帖子]:[建议]把一次传感器的类型和测试要求告诉我,wycmail@126.com,我帮你想个办法!