问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

急急急!!谁能帮我分析一下这个单片机汇编语言程序,写出每步的作用。急急急!!

发布网友 发布时间:2022-04-23 16:38

我来回答

2个回答

热心网友 时间:2023-10-09 13:49

虽然没有楼上动作快,但既然也做了就发上来参考吧,应该比楼上的更具体写,比如P1.5干嘛啊。 :)
__________________________________________________________________
整体描述:同时在P1.0 和 P1.1输出反相的占空可调的方波
占空比调整通过修改变量M 来设定,变量AS用来做内部循环量,范围0-M
P1.5使用闪烁的方式来显示对于M设定的占空比值的非法告警
调整占空比设定M通过int0 和P1.2来 进行加一和减一的设定 ,通过int1 和P1.2来 进行加五和减五的设定
设定的M值通过连接在P0,P2口的两个LED来显示,方式10进制单位显示
COUNT EQU 30H //没用的变量
AS EQU 30H //timer1内占空比计数
M EQU 35H //占空比计数上限设定
ORG 0000H
LJMP START
ORG 0003H //int0中断服务入口 占空比1步进
LJMP INT00
ORG 0013H //int1中断服务入口 占空比5步进
LJMP INT11
START: SETB EX0 //初始化开始
SETB PX0
SETB IT0
SETB EX1
CLR PX1
SETB IT1
SETB EA
CLR P1.5 //P1.5显示设定占空比数字非法时闪烁告警
MOV TMOD,#21H //使用timer0 模式1和timer1 模式2
MOV TH1,#38H //timer1做占空部分控制,即高低电平时间控制
MOV TH0,#0B1H //timer0做方波周期
MOV TL0,#0E0H
SETB TR0
SETB TR1
MOV DPTR,#TABLE //LED段码地址
MOV M,#50 //占空比上限初值
MOV P0,#3FH //占空比10进低位 LED段码
MOV P2,#6DH //占空比10进高位 LED段码
MOV AS,#0 //占空比计数变量
TOP:SETB TR1 //**新的一个方波周期从这里开始**
SETB P1.0 //P1.0和P1.1分别输出反相的等周期方波
CLR P1.1 //
MOV TH0,#0B1H //timer0计数值、即方波周期值设定
MOV TL0,#0E0H
MOV AS,#0 //高电平时间计数变量初值每个timer1溢出加一(最大等于M)
MOV B,#10 //没用
MOV A,M
MOV B,#100
DIV AB
JZ TIME1 //如果设定的M值在01-99(可以理解为可接受的值,占空比最少1:99最多99:1)
MOV B,#10
CLERK:SETB P1.5 //设定的占空比值非法,则闪烁P1.5告警
LCALL DELAY
CLR P1.5
LCALL DELAY
SETB P1.5
LCALL DELAY
CLR P1.5
MOV M,#50 //自动重新设定默认占空比
LCALL SHOW //LED显示M,即当前设定占空比的值
LJMP TOP //重新 开始新懂得方波周期
TIME1:JBC TF1,NEXT //等待timer1 溢出标志
SJMP TIME1
NEXT:INC AS //每次溢出变量AS加一,
MOV A,M
CJNE A,AS,TIME1 //直到AS=M ,即占空计数达到,
CLR P1.0 //波形反相
SETB P1.1
CLR TR1 //关闭timer1,波形在timer0控制的一个周期内不再变化
TIME0:JBC TF0,TOP
SJMP TIME0 //timer0溢出,开始下一个周期波形
INT00:JNB P1.2,LOOP1 //外部中断0中断处理
INC M //当int0 为低电平且P1.2为高则M增加1,每次机器响应int0都加一,直到int0消失
LCALL SHOW //LED显示M,即当前设定占空比的值
RETI
LOOP1:DEC M //当int0 为低电平且P1.2为低则M减1,每次机器响应int0都减一,直到int0消失
LCALL SHOW //LED显示M
RETI
INT11:JNB P1.2,LOOP //外部中断1中断处理
MOV A,M
ADD A,#5 //当int1 为低电平且P1.2为高则M增加5,每次机器响应int0都加五,直到int0消失
MOV M,A
LCALL SHOW //LED显示M
RETI
LOOP:MOV A,M
SUBB A,#5 //当int1 为低电平且P1.2为高则M减少5,每次机器响应int0都减五,直到int0消失
MOV M,A
LCALL SHOW //LED显示M
RETI
SHOW:MOV A,M //M /10 AB 内分别是商和余数
MOV B,#10
DIV AB
MOVC A,@A+DPTR //查表显示余数
MOV P2,A
MOV A,B
MOVC A,@A+DPTR //查表显示商
MOV P0,A
MOV B,#10 //没用
RET
DELAY:MOV R6,#0FFH //延时函数
DEY1:MOV R7,#0FFH
DEY2:MOV R5,#3
DJNZ R5,$
DJNZ R7,DEY2
DJNZ R6,DEY1
RET //延时结束
TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH //LED段码表
END

热心网友 时间:2023-10-09 13:50

COUNT EQU 30H
AS EQU 30H
M EQU 35H 地址35H定义为变量M
ORG 0000H ORG 后跟地址,表示下面的指令所在地址
LJMP START 即此跳转指令在 0000H地址出,为系统开机第一条
ORG 0003H 同理,另外0003H为中断入口地址,对应的是什么中断暂时不记得了
LJMP INT00
ORG 0013H
LJMP INT11
START: SETB EX0 中断与定时器的初始化
SETB PX0
SETB IT0
SETB EX1
CLR PX1
SETB IT1
SETB EA 打开中断总开关
CLR P1.5
MOV TMOD,#21H 设置定时器/计数器的工作模式(参阅51单片机书)
MOV TH1,#38H 设置定时器0的初始值
MOV TH0,#0B1H
MOV TL0,#0E0H 设置定时器1的初始值
SETB TR0
SETB TR1
MOV DPTR,#TABLE 把显示字符表的首地址给DPTR
MOV M,#50
MOV P0,#3FH P0所接数码管显示0
MOV P2,#6DH P2所接数码管显示5 应该是显示50
MOV AS,#0
TOP:SETB TR1 打开定时器1
SETB P1.0
CLR P1.1
MOV TH0,#0B1H 设置定时器0的初始值
MOV TL0,#0E0H
MOV AS,#0
MOV B,#10 B=10
MOV A,M A=M=50
MOV B,#100
DIV AB A除上B
JZ TIME1 跳转到TIME1函数
MOV B,#10
CLERK:SETB P1.5 P1.5 ---- ----
LCALL DELAY ---- ----
CLR P1.5 这段设置p1.5引脚产生方波
LCALL DELAY
SETB P1.5
LCALL DELAY
CLR P1.5
MOV M,#50 M=50
LCALL SHOW 显示50
LJMP TOP
TIME1:JBC TF1,NEXT 判断定时器1 定时时间是否到,没到循环等待,到了跳转到NEXT
SJMP TIME1
NEXT:INC AS AS加一
MOV A,M
CJNE A,AS,TIME1 判断A-AS是否为零 这个是方波占空比可调的关键,根据不同的M值这里循环延时的时间不一样
CLR P1.0
SETB P1.1
CLR TR1
TIME0:JBC TF0,TOP 判断定时器0 定时时间是否到,没到循环等待,到了跳转到TOP从新开始
SJMP TIME0
INT00:JNB P1.2,LOOP1 中断INT0产生,判断P1.2,为0调用LOOP1 M-1后显示
INC M 否则M+1显示
LCALL SHOW
RETI
LOOP1:DEC M
LCALL SHOW
RETI
INT11:JNB P1.2,LOOP 中断INT1产生,判断P1.2,为0调用LOOP M-5后显示
MOV A,M 否则M+5显示
ADD A,#5
MOV M,A
LCALL SHOW
RETI
LOOP:MOV A,M
SUBB A,#5
MOV M,A 把要显示的数存于M
LCALL SHOW 调用显示子函数
RETI
SHOW:MOV A,M 这一段是显示子函数 M为一个两位数,除10后得到 十位和各位
MOV B,#10
DIV AB
MOVC A,@A+DPTR DPTR指向的是下面的TABLE,如果A=0,就把3FH给A,如果A=9,就把6FH给A
MOV P2,A 把A给P2,P2接的是数码管的位选。
MOV A,B
MOVC A,@A+DPTR
MOV P0,A 看这个 你的硬件应该是P2接一个数码管,P0接一个数码管
MOV B,#10
RET
DELAY:MOV R6,#0FFH 这一段为延时程序,就是通过循环执行指令达到延时的效果
DEY1:MOV R7,#0FFH
DEY2:MOV R5,#3
DJNZ R5,$
DJNZ R7,DEY2
DJNZ R6,DEY1
RET
TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH 用的应该是数码管,这对应的是0-9
END

由于缺少51单片机书,有些记得不太清楚,如果你手里有,就算不太会用51单片机。有上面的注释应该可以看的懂这段程序了。
祝你好运。LJMP INT11
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
巴西龟最长活多久,家养!!! 养胃的药最好的是什么啊 婴儿积食发烧不愿吃药怎么办 板门穴位在哪个部位 手机设置放偷看的方法? 凝结水回收器生产厂家? 个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 电路的问题 如何用电视充当电脑显示器 单片机中的空占比是什么意思 买电视机来代替电脑显示器的区别在哪里? 关于51单片机产生方波信号 SPWM脉宽调制变频器出来的是什么波形,是脉冲吧? 求51单片机PWM程序:两按键K1、K2,两管脚输出频率为1KHZ,占空比在0%到100%的方波,K1、K2调节占空。 C#窗体编程,以窗体按钮,通过串口来控制单片机板上灯的亮暗 电视机当电脑显示器 可以用电视机当电脑显示器吗? 设计一个用555定时器构成一个占空可调[周期不变]的方波发生器 电视机当电脑显示器好吗 单片机中的空占比是什么意思? 使用51单片机,晶振频率为6MHz,使用定时器0,以 方式2,在P1.0输出周期400us, 占空 PWM的稳流稳压波形 非对称方波的正波宽度怎么看 能不能帮我设计一个电路:方波发生器20~2k可调 占空5%~95%最好用NE555 告诉我个网址也行不胜感激 新手还没 步进电机脉冲信号问题??? 方波信号发生器的制作与设计,谢谢了 三菱PLC中,用PWM设置过的方波脉冲去控制步进电机,占空比会对步进电机的速度有影响吗? 电视机能当电脑显示器吗 关于直流电机调速的问题 短文 巴甫洛夫很忙 阅读答案 巴甫洛夫很忙 阅读答案 阅读短文,回答问题。 巴甫洛夫很忙   “巴甫洛夫很忙……”,这话不是别人说的,是巴甫洛 巴甫洛夫很忙阅读答案 请问天山雪菊有哪些功效呢? 巴甫洛夫很忙阅读答案(不近人情是什么意思?你怎样理解巴甫洛� 天山雪菊茶有什么功效与作用? 《巴普洛夫很忙》 阅读答案。 oyo酒店是什么意思 巴甫洛夫很忙阅读答案(你怎样理解巴甫洛夫的不近人情 裁员、解约、高管离职,为什么 OYO的故事就到头了? 天山雪菊冲泡几次? 巴普洛夫很忙阅读题答案 对oyo经营模式利与弊 天山雪菊怎么喝 天山雪菊特点 阅读题:巴甫洛夫很忙,急求解答!!!(>﹏<) 在OYO2.0模式下,酒店的管理模式有没有发生什么改变? 怎样辨别天山雪菊的品质好坏呢?