首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

C51程序不懂,求解惑解决思路

2012-11-08 
C51程序不懂,求解惑ORG0000HRESET:AJMPMAIN;转主程序ORG001BH;T1的中断入口AJMPIT1P;转T1中断处理程序IT1P

C51程序不懂,求解惑
ORG 0000H
RESET: AJMP MAIN ;转主程序
  ORG 001BH ;T1的中断入口
AJMP IT1P;转T1中断处理程序IT1P
  ORG 0100H
MAIN: MOV SP,#60H ;设堆栈指针 
  MOV TMOD,#20H;设置T1为定时方式2,00100000B  
  MOV TL1,#06H;置T1计数初值06H,定时250×2=500uS
  MOV TH1,#06H ;置自动重装初值06H 
SETB ET1 ;允许T1中断
  SETB EA ;CPU开中断
SETB TR1 ;启动T1
  MOV 58H,#10
MOV 59H,#100
 HERE: AJMP HERE ;自身跳转
  IT1P: (T1中断服务子程序)
  MOV 58H,#10
  DJNZ 59H,LR  
MOV 59H,#100 
  LR: CPL P1.0 ;P1.0的状态取反
  RETI ;中断返回
主要是后面的循环看不懂,讲一下是怎么循环的,详细一点,谢谢

[解决办法]
我不知道你所所的循环是什么意思? 我不知你是否懂C语言。
简单来讲 这程序有2个函数
一个是 MAIN函数 他做了2个事情
1: 初始化T1定时器(自动重载模式),开中断
2:设置2个全局变量 一个 58H = 10 另一个 59H = 100
干完这两件事,MAIN函数就相当于就 一直在while(1); HERE: AJMP HERE

第二个函数就是T1的中断函数 IT1P:
没当产生中断时就进入IT1P这段程序
在里面 先把 58H = 10 然后 59H = 59H - 1 然后判断59H 如果 >0 将 P1.0口去反, 如果=0就 59H=100然后在将P1.0口取反。

这个程序就是这样的,不知道你的哪个循环不懂? 还有就是他 58H我认为没用不知道为什么还有 赋值。

热点排行