单片机高手帮忙哈(汇编语言),帮忙解释下下面每一步程序的含义,就是注释下每一步,越详细越好,谢谢!

采用定时器/计数器T0对外部脉冲进行计数,每计数100个脉冲后,T0转为定时工作方式。定时1ms后,又转为计数方式,如此循环下去。假定用MCS-51单片机的晶体振荡器的频率为6MHZ,请使用方式1实现,要求编写出程序:程序如下
ORG 000H
AJMP MAIN
ORG 000BH
LJMP PT0J
ORG 0100H
MAIN: MOV TMOD,#05H
MOV TH0,#0FFH;
MOV TL0, #9CH
CLR F0
SETB TR0
SETB ET0
SETB EA
HERE; AJMP HERE
PT0J; JB F0,PT0D
MOV TMOD,#01H
MOV TH0,#0FEH
MOV TL0,#0CH
SETB F0
RETI
PT0D; CLR F0
MOV TMOD,#05H
MOV TH0,#0FFH
MOV TL0,#9CH
RETI
END

ORG 000H ;00h复位入口
AJMP MAIN ;跳到MAIN
ORG 000BH ;定时器0中断入口
LJMP PT0J ;跳到PT0J
ORG 0100H ;MAIN主程序入口
MAIN: MOV TMOD,#05H ;模式寄存器配置定时器0为16位计数器,p3.4为计数器脉冲输入
MOV TH0,#0FFH ;配置计数器初值0FF9CH,使得计数100个脉冲时刚好溢出,产生中断
MOV TL0, #9CH ;
CLR F0 ;清通用标志位
SETB TR0 ;启动计数器
SETB ET0 ;允许定时器0中断
SETB EA ;允许总中断
HERE; AJMP HERE ;死循环,(等待中断)
PT0J; JB F0,PT0D ;F0标志为1则跳到PT0D
MOV TMOD,#01H ;配置定时器0为16位定时器,
MOV TH0,#0FEH ;装载计数初值,使得刚好1ms时溢出产生中断
MOV TL0,#0CH ;
SETB F0 ;F0置1,使得下次中断时 转换到计数模式
RETI ;中断返回
PT0D; CLR F0 ;F0置0,使得下次中断时 转换到定时器模式
MOV TMOD,#05H ;配置定时器0为16位计数器
MOV TH0,#0FFH ;装载计数初值,使得刚好计数100个脉冲时产生中断
MOV TL0,#9CH ;
RETI ;中断返回
END ;汇编好就好在这里,效率高,c是做不到的
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答