急求单片机红绿灯的汇编语言程序设计
发布网友
发布时间:2022-04-24 01:53
我来回答
共5个回答
热心网友
时间:2023-10-20 04:19
去买一本书吧!单片机原理与应用,你可能还不杂个会吧,这个你得慢慢来,只要你把那本书学会了差不多你能看会了,你可能还很年轻吧,要慢慢来,别人给你说没的意思的,年轻嘛慢慢来,我也是这样来的,我看过你这个还是简单的,我是搞仪表的,你看看我的程序吧!!! 十分之一
文件名:*******.ASM
;* 型号 : M603-VA
;* 产品名称:4位三相电流/电压表
;* PCB硬件:M603-3P-VA-01(01)/M603-3P-VA-03(01)
;* 实现功能:(1)可测三相三线电压/电流
;(2)对输入电流/电压值做任意刻度显示
;* 版本号: 第1.0版
;* 起草日期:2006.3.30 最后修改日期: 2006.8.16
;* 修改日志:
;* V1.1 解决测量漂移问题
;* 完善1:LiuQK-2007.1.1
;* 1、增加RS485通讯功能
;* 2、增加变送功能
;* 3、增加上下限报警
;//////////////////////////////////////////////////////////////
ORG 0000
AJMP MAIN
ORG 0003H;INT0中断入口地址停电保存
;ljmp irq_int0
NOP
NOP
LJMP Err;程序飞跑,转到处理程序,重新启动.
ORG 000BH;T0中断入口, 用于显示定时
LJMP IRQ_t0
NOP
NOP
LJMP Err;程序飞跑,转到处理程序,重新启动.
ORG 0013H;INT1中断口地址
LJMP IRQ_int1
NOP
NOP
LJMP Err;程序飞跑,转到处理程序,重新启动.
ORG 001BH;T1中断入口 用于A/D转换
ljmp irq_t1
NOP
NOP
LJMP Err;程序飞跑,转到处理程序,重新启动.
ORG 23H
LJMP IRQ_UART;用于RS-485通讯
NOP
NOP
LJMP Err
org 002bh ;D/A
ljmp irq_t2
nop
nop
LJMP Err
;////////////////////////////////////////////////
;主程序从MAIN开始 执行
;////////////////////////////////////////////////
;////////////////////////////////////////////////
;STC单片机附加功能宏定义
P4 DATA 0e8h;P4口地址
WDT_CONTR DATA 0E1H;看门狗控制地址
AUXR DATA 8EH ;只写寄存器,只能用MOV AUXR,#DATA 命令. 用于控制扩展RAM和使能ALE.
AUXR1 DATA 0A2H;本寄存器用于数据指针选择://=0 选择DPTR0 , =1 选择DPTR1 //
XICON DATA 0C0H;特殊功能寄存器申明
;89C52定时器T2
;T2CON DATA 0C8H
;TH2 DATA 0CDH
;TL2 DATA 0CCH
;RCAP2H DATA 0CBH
;RCAP2L DATA 0CAH
;RL2 BIT 0C8H.0
;CT2 BIT 0C8H.1
;TR2 BIT 0C8H.2
;EXEN2 BIT 0C8H.3
;TCLK BIT 0C8H.4
;RCLK BIT 0C8H.5
;EXF2 BIT 0C8H.6
;TF2 BIT 0C8H.7
;ET2 BIT 0A8H.5
;PT2 BIT 0B8H.5
ORG 35h
MAIN: mov r0,#0Ffh
FILL: clr a
MOV @R0,A
DJNZ R0,FILL;(填充)初始化RAM内的数据全部为00H。
mov psw,#0
MOV SP,#80H;堆栈指针
MOV AUXR,#00
MOV CHECK_CODE,#0AAH
ACALL DATA_CHECK;数据校验
; setb 21h.0;置仪表起动标志
;EA中断允许,ET1中断允许,ET0中断允许
SETb ea ;EA中断允许
setb IT1;INT1中断方式是负边沿触发方式
setb it0;INT0中断方式是负边沿触发方式
mov pcon,#00h;
SETB PT0
CLR PX0
CLR PT1
CLR PX1
;SETB PX1
setb et0;T0中断允许
setb ET2
JNB 25H.2,IE_1
LCALL R_LOAD;载入波特率
mov t2con,#34h
setb p1.0;将485置为接收状态
mov scon,#0D0h;初始化并启动串口
SETB ES;开中断
SETB PS;串口中断优先
CLR PS
sjmp ie_OK
ie_1: JNB 25H.1,IE_OK
mov RCAP2H,#0ffh
mov RCAP2L,#0ffh
mov t2con,#04h
SETB PT2
IE_OK: SETB 20H.0 ;仪表启动标志
mov 2fh,#0;
lcall ie_ch;启动通道
;clr p1.2
;clr p1.3
;/////////////////////////////////////////////////
;/显示程序/
main2: ;启动看门狗以及定时时间为4S
MOV WDT_CONTR,#34H
setb et0
setb tr0
main20: JB 20H.7,MAIN3;查看A/D是否运行
lCALL IE_SET ;启动测量初始化
SETB 20H.7 ;测量启动标记
main3: ;A.数据校验
ACALL DATA_CHECK;数据校验
;B.测量频率计算
ACALL CY_HZ;计算
;C.显示比例值计算
acall dis_scale
;D:计算平均值
acall Hz_av
;E:上下限报警
ACALL ALARM_OUTPUT
;F:RS485通讯/变送输出
LCALL COMMUNICATION
;g:按键处理
LCALL SETKEY
LCALL SHIFTKEY
LCALL DOWKEY
LCALL ATKEY
;h:BCD码转换
ACALL bcdCode;bcd码转换
AJMP MAIN2;重新回到MAIN2
;//////////////////////////////////////
;A/D转换采样启动程序
IE_SET: MOV 1eH,#4;INT1不中断等待次数
MOV 1fH,#0;T0定时循环次数
MOV 1cH,#0;采样脉冲个数缓冲器
MOV 1dH,#0
MOV TMOD,#00010001B;T1,T0为16位定时器.
;再次初始化T1;int1
setb ea;再次启动中断
setb et1
clr tr1
mov tl1,#0
mov th1,#0
setb tr1
CLR IE1; 清除int1中断标志
SETB EX1;开启INT1中断
RET
;********************
;测量通道设置
ie_ch: push dpl
push dph
ie_ch1: mov a,2fh
ie_ch2: rl a;左移
cjne a,#7,ie_ch20;A/D转换共5次循环
ie_ch20: jc ie_ch21
clr a
ie_ch21: mov dptr,#ie_ch3
jmp @a+dptr
nop
nop
;通道循环表
ie_ch3: sjmp ie_offset ;零点偏移测量;0
sjmp ie_pa;A相过程值1
sjmp ie_pb;B相过程值2
sjmp ie_pc;C相过程值3
nop
nop
;4051 地址引脚排列 (9) (10 ) (11) 为地址 A2(c) A1(b) A0(a).
;CPU控制引脚: (Gnd) (p1.6) (p1.7)
;地址对应关系:000-- 0 0 0------PC通道(13PIN)
;001---0 0 1-----PB通道(14PIN)
;002---0 1 0-----PA通道(15PIN)
;003---0 1 1-----offset通道(12PIN)
;004---0-----GND
;005---0-----GND
;006---0-----GND
;007---0-----GND
;PA测量
ie_pa: nop
;功能检查
setb p1.6
clr p1.7
ie_ch_com: pop dph
pop dpl
ret
nop
;PB测量
ie_pb: setb p1.7
clr p1.6
sjmp ie_ch_com
;PC测量
ie_pc: CLR p1.7
clr p1.6
sjmp ie_ch_com
;零点偏移OFFSET测量0通道,硬件连接4051 的13引脚
ie_offset: SETB p1.7
SETB p1.6
sjmp ie_ch_com
nop
nop
;**************************
;频率计算
NOSWAP:
RET
nop
CY_HZ: JNB 3EH,NOSWAP;无采样结束标志
CLR 20H.7;清除测量挂起标记
CLR 3EH;清除测量结束标记
;T0中断次数浮点数转换
cy_hz_1: CLR 3CH
MOV R2,#0
MOV R3,1fh
MOV R1,#08H
LCALL INTF;浮点数存储08H 09H 0AH
;T0中断次数计算成时间周期;每中断1次时间为65536uS
MOV 0BH,#17;65536
MOV 0CH,#80H
MOV 0DH,#00H
MOV R0,#0BH
LCALL FMUL;
mov r1,#08h
LCALL FSTR;存储08H 09H 0AH
;T0剩余时间浮点数转换
MOV R3,1Bh
MOV R2,1Ah
MOV R1,#0BH
LCALL INTF;T0内检测到的时间转换浮点数存入0BH
;计算超出定时60mS以外的时间周期
MOV R0,#08H
CLR 3AH
LCALL FABP;T0+08H内时间和
LCALL FSTR;存储0BH,0CH 0DH
;计数总时间周期
MOV 08H,#18;65.535*2mS
MOV 09H,#80H
MOV 0AH,#0h
CLR 3AH
LCALL FABP;定时时间+T0+30H得到检测总时间
LCALL FSTR;存储0BH 0CH 0DH
;---------------------------------------
;在定时周期内采样到的脉冲个数转换成浮点数
MOV R2,1ch;测量周期个数转换浮点数
MOV R3,1dH
mov r1,#08h
Lcall intf;数据存放在08H 09H AH
;计算频率值
MOV R0,#08H
MOV R1,#0bH
LCALL Fdiv;频率
LCALL FSTR;存储0b 0c 0d
mov 08h,#20
mov 09h,#0f4h
mov 0ah,#24h
Lcall fmul
; Lcall fstr
mov a,2fh
jnz time_1
;(零点测量)
; mov 10h,0bh
; mov 11h,0ch
; mov 12h,0dh
MOV R1,#10H
; lcall fstr
sjmp TIME_4
nop
nop
time_1: ; mov r0,#0bh
; mov r1,#10h
; setb 3ah
; Lcall fabp
mov a,2fh
cjne a,#1,time_2
;第二次采样值存放到30H 31H 32H 地址(PA过程值测量)
; mov 36h,0bh
; mov 37h,0ch
; mov 38h,0dh
mov r1,#30h
; Lcall fstr
sjmp time_4
; nop
; nop
time_2: cjne a,#2,time_3
;第3次采样值存放33H 34H 35H (PB过程值测量)
; mov 33h,0bh
; mov 34h,0ch
; mov 35h,0dh
mov r1,#33H
; Lcall fstr
Sjmp time_4
;第4次采样值存放36H 37H 38H (PC过程值测量)
time_3: MOV R1,#36H
setb 20h.6;置A/D转换结束标志,用于过程值计算
INC 0EH;A/D转换计数器,用于延迟报警/数据刷新
; mov 30h,0bh
; mov 31h,0ch
; mov 32h,0dh
TIME_4: LCALL FSTR
;通道切换
TIME_COM: INC 2FH
mov a,2fh
cjne a,#4,time_COM0
time_COM0: jc time_COM1
mov 2fh,#0
time_COM1: acall ie_ch
ret
热心网友
时间:2023-10-20 04:19
程序源代码
ORG 0000H ;主程序的入口地址
LJMP MAIN ;跳转到主程序的开始处
ORG 0003H ;外部中断0的中断程序入口地址
ORG 000BH ;定时器0的中断程序入口地址
LJMP T0_INT ;跳转到中断服务程序处
ORG 0013H ;外部中断1的中断程序入口地址
MAIN : MOV SP,#50H
MOV IE,#8EH ;CPU开中断,允许T0中断,T1中断和外部中断1中断
MOV TMOD,#51H ;设置T1为计数方式,T0为定时方式,且都工作于模式1
MOV TH1,#00H ;T1计数器清零
MOV TL1,#00H
SETB TR1 ;启动T1计时器
SETB EX1 ;允许INT1中断
SETB IT1 ;选择边沿触发方式
MOV DPTR ,#0003H
MOV A, #80H ;给8255赋初值,8255工作于方式0
MOVX @DPTR, A
AGAIN: JB P3.1,N0 ;判断是否要设定东西方向红绿灯时间的初值,若P3.1为1 则跳转
MOV A,P1
JB P1.7,RED ;判断P1.7是否为1,若为1则设定红灯时间,否则设定绿灯时间
MOV R0,#00H ;R0清零
MOV R0,A ;存入东西方向绿灯初始时间
MOV R3,A
LCALL DISP1
LCALL DELAY
AJMP AGAIN
RED: MOV A,P1
ANL A,#7FH ;P1.7置0
MOV R7,#00H ;R7清零
MOV R7,A ;存入东西方向红灯初始时间
MOV R3,A
LCALL DISP1
LCALL DELAY
AJMP AGAIN
;-------------------------------------------
N0: SETB TR0 ;启动T0计时器
MOV 76H,R7 ;红灯时间存入76H
N00: MOV A,76H ;东西方向禁止,南北方向通行
MOV R3,A
MOV DPTR,#0000H ;置8255A口,东西方向红灯亮,南北方向绿灯亮
MOV A,#0DDH
MOVX @DPTR, A
N01: JB P2.0,B0
N02: SETB P3.0
CJNE R3,#00H,N01 ;比较R3中的值是否为0,不为0转到当前指令处执行
;------黄灯闪烁5秒程序------
N1: SETB P3.0
MOV R3,#05H
MOV DPTR,#0000H ;置8255A口,东西,南北方向黄灯亮
MOV A,#0D4H
MOVX @DPTR,A
N11: MOV R4,#00H
N12: CJNE R4,#7DH,$ ;黄灯持续亮0.5秒
N13: MOV DPTR,#0000H ; 置8255A口,南北方向黄灯灭
MOV A,#0DDH
MOVX @DPTR,A
N14: MOV R4,#00H
CJNE R4,#7DH,$ ;黄灯持续灭0.5秒
CJNE R3,#00H,N1 ;闪烁时间达5秒则退出
;------------------------------------------------------------
N2: MOV R7,#00H
MOV A,R0 ;东西通行,南北禁止
MOV R3,A
MOV DPTR,#0000H ; 置8255A口,东西方向绿灯亮,南北方向红灯亮
MOV A,#0EBH
MOVX @DPTR,A
N21: JB P2.0,T03
N22: CJNE R3,#00H,N21
;------黄灯闪烁5秒程序------
N3: MOV R3,#05H
MOV DPTR,#0000H ;置8255A口,东西,南北方向黄灯亮
MOV A,#0E2H
MOVX @DPTR,A
N31: MOV R4,#00H
CJNE R4,#7DH,$ ;黄灯持续亮0.5秒
N32: MOV DPTR,#0000H ; 置8255A口,南北方向黄灯灭
MOV A,#0EBH
MOVX @DPTR,A
N33: MOV R4,#00H
CJNE R4,#7DH,$ ;黄灯持续灭0.5秒
CJNE R3,#00H,N3 ;闪烁时间达5秒则退出
SJMP N00
;------闯红灯报警程序------
B0: MOV R2,#03H ;报警持续时间3秒
B01: MOV A,R3
JZ N1 ;若倒计时完毕,不再报警
CLR P3.0 ;报警
CJNE R2,#00H,B01 ;判断3秒是否结束
SJMP N02
;------1秒延时子程序-------
N7: RETI
T0_INT:MOV TL0,#9AH ;给定时器T0送定时10ms的初值
MOV TH0,#0F1H
INC R4
INC R5
CJNE R5,#0FAH,T01 ;判断延时是否够一秒,不够则调用显示子程序
MOV R5,#00H ;R5清零
DEC R3 ;倒计时初值减一
DEC R2 ;报警初值减一
T01: ACALL DISP ;调用显示子程序
RETI ;中断返回
;------显示子程序------
DISP: JNB P2.4,T02
DISP1: MOV B,#0AH
MOV A,R3 ;R3中值二转十显示转换
DIV AB
MOV 79H,A
MOV 7AH,B
DIS: MOV A,79H ;显示十位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0F7H
MOVX @DPTR,A
LCALL DELAY
DS2: MOV A,7AH ;显示个位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0FBH
MOVX @DPTR,A
RET
;------东西方向车流量检测程序------
T03: MOV A,R3
SUBB A,#00H ;若绿灯倒计时完毕,不再检测车流量
JZ N3
JB P2.0,T03
INC R7
CJNE R7,#64H,E1
MOV R7,#00H ;中断到100次则清零
E1: SJMP N22
;------东西方向车流量显示程序------
T02: MOV B,#0AH
MOV A,R7 ;R7中值二转十显示转换
DIV AB
MOV 79H,A
MOV 7AH,B
DIS3: MOV A,79H ;显示十位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0F7H
MOVX @DPTR,A
LCALL DELAY
DS4: MOV A,7AH ;显示个位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0FBH
MOVX @DPTR,A
LJMP N7
;------延时4MS子程序----------
DELAY: MOV R1,#0AH
LOOP: MOV R6,#64H
NOP
LOOP1: DJNZ R6,LOOP1
DJNZ R1,LOOP
RET
;------字符表------
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
ORG 0000H
AJMP MAIN
ORG 000BH
LJMP INT
ORG 0030H
MAIN:MOV R2,#20H
MOV TMOD,#01H
MOV TL0,#0B0H
MOV TH0,#80H
SETB EA
SETB ET0
SETB TR0
LOOP:MOV A,#01H
MOV P1,A
LCALL DEL
MOV R0,#02H
LCALL FP
LOOP1:MOV A,#02H
MOV P1,A
LCALL DEL
MOV R0,#02H
LCALL FP
LOOP2:MOV A, #04H
MOV P1,A
LCALL DEL
MOV R0,#05H
LCALL FP
MOV P1,#00H
LCALL DEL
CJNE R0,#00H ,AA
SJMP LOOP
FP:MOV R1,#80H
MOV A,R1
MOV DPTR,#3FFFH
MOVX @DPTR,A
RR A
MOV R1,A
MOV A,R0
ANL A,#0FH
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#5FFFH
MOVX @DPTR,A
LCALL DEL
MOV A,#0FFH
MOV DPTR,#5FFFH
MOVX @DPTR,A
MOV A,R1
MOV DPTR,#3FFFH
MOVX @DPTR,A
MOV A,R0
ANL A,#0F0H
SWAP A
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#5FFFH
MOVX @DPTR,A
LCALL DEL
MOV A,#0FFH
MOV DPTR,#5FFFH
MOVX @DPTR,A
CJNE R0,#99H,FP
RET
DEL:MOV R5,#100H
DEL0:MOV R6,#250H
DEL1:DJNZ R6,DEL1
DJNZ R5,DEL0
RET
INT: CLR ET0
DJNZ R2,GOON
MOV A,R0
ADD A,#99H
DA A
MOV R0,A
MOV R2,#20H
GOON:MOV TMOD,#01H
MOV TL0,#0B0H
MOV TH0,#80H
SETB EA
SETB ET0
SETB TR0
RETI
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
参考资料:http://zhidao.baidu.com/question/52957562.html?fr=qrl
热心网友
时间:2023-10-20 04:20
如下资料是否需要?
*******目录*******
一、设计要求
二、设计内容
三、交通信号灯模拟控制系统设计程序流程图
四、交通信号灯模拟控制系统原理图
五、交通信号灯模拟控制系统主程序
六、运行步骤
七、检测与调试
八、课程设计体会
九、参考文献
十、说明
=================================================
你好:
一份完整的单片机红绿灯的汇编语言程序设计已经发给你了,
如果觉得还满意,别忘了给分哦:)
热心网友
时间:2023-10-20 04:20
http://tieba.baidu.com/f?kz=108122033
http://www.baidu.com/s?ie=utf-8&tn=ylmf&&wd=%E5%8D%95%E7%89%87%E6%9C%BA%E7%BA%A2%E7%BB%BF%E7%81%AF%E7%9A%84%E6%B1%87%E7%BC%96%E8%AF%AD%E8%A8%80%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1
参考资料:http://tieba.baidu.com/f?kz=108122033
热心网友
时间:2023-10-20 04:21
这么难,我都看不懂,没法帮你了!
热心网友
时间:2023-10-20 04:19
去买一本书吧!单片机原理与应用,你可能还不杂个会吧,这个你得慢慢来,只要你把那本书学会了差不多你能看会了,你可能还很年轻吧,要慢慢来,别人给你说没的意思的,年轻嘛慢慢来,我也是这样来的,我看过你这个还是简单的,我是搞仪表的,你看看我的程序吧!!! 十分之一
文件名:*******.ASM
;* 型号 : M603-VA
;* 产品名称:4位三相电流/电压表
;* PCB硬件:M603-3P-VA-01(01)/M603-3P-VA-03(01)
;* 实现功能:(1)可测三相三线电压/电流
;(2)对输入电流/电压值做任意刻度显示
;* 版本号: 第1.0版
;* 起草日期:2006.3.30 最后修改日期: 2006.8.16
;* 修改日志:
;* V1.1 解决测量漂移问题
;* 完善1:LiuQK-2007.1.1
;* 1、增加RS485通讯功能
;* 2、增加变送功能
;* 3、增加上下限报警
;//////////////////////////////////////////////////////////////
ORG 0000
AJMP MAIN
ORG 0003H;INT0中断入口地址停电保存
;ljmp irq_int0
NOP
NOP
LJMP Err;程序飞跑,转到处理程序,重新启动.
ORG 000BH;T0中断入口, 用于显示定时
LJMP IRQ_t0
NOP
NOP
LJMP Err;程序飞跑,转到处理程序,重新启动.
ORG 0013H;INT1中断口地址
LJMP IRQ_int1
NOP
NOP
LJMP Err;程序飞跑,转到处理程序,重新启动.
ORG 001BH;T1中断入口 用于A/D转换
ljmp irq_t1
NOP
NOP
LJMP Err;程序飞跑,转到处理程序,重新启动.
ORG 23H
LJMP IRQ_UART;用于RS-485通讯
NOP
NOP
LJMP Err
org 002bh ;D/A
ljmp irq_t2
nop
nop
LJMP Err
;////////////////////////////////////////////////
;主程序从MAIN开始 执行
;////////////////////////////////////////////////
;////////////////////////////////////////////////
;STC单片机附加功能宏定义
P4 DATA 0e8h;P4口地址
WDT_CONTR DATA 0E1H;看门狗控制地址
AUXR DATA 8EH ;只写寄存器,只能用MOV AUXR,#DATA 命令. 用于控制扩展RAM和使能ALE.
AUXR1 DATA 0A2H;本寄存器用于数据指针选择://=0 选择DPTR0 , =1 选择DPTR1 //
XICON DATA 0C0H;特殊功能寄存器申明
;89C52定时器T2
;T2CON DATA 0C8H
;TH2 DATA 0CDH
;TL2 DATA 0CCH
;RCAP2H DATA 0CBH
;RCAP2L DATA 0CAH
;RL2 BIT 0C8H.0
;CT2 BIT 0C8H.1
;TR2 BIT 0C8H.2
;EXEN2 BIT 0C8H.3
;TCLK BIT 0C8H.4
;RCLK BIT 0C8H.5
;EXF2 BIT 0C8H.6
;TF2 BIT 0C8H.7
;ET2 BIT 0A8H.5
;PT2 BIT 0B8H.5
ORG 35h
MAIN: mov r0,#0Ffh
FILL: clr a
MOV @R0,A
DJNZ R0,FILL;(填充)初始化RAM内的数据全部为00H。
mov psw,#0
MOV SP,#80H;堆栈指针
MOV AUXR,#00
MOV CHECK_CODE,#0AAH
ACALL DATA_CHECK;数据校验
; setb 21h.0;置仪表起动标志
;EA中断允许,ET1中断允许,ET0中断允许
SETb ea ;EA中断允许
setb IT1;INT1中断方式是负边沿触发方式
setb it0;INT0中断方式是负边沿触发方式
mov pcon,#00h;
SETB PT0
CLR PX0
CLR PT1
CLR PX1
;SETB PX1
setb et0;T0中断允许
setb ET2
JNB 25H.2,IE_1
LCALL R_LOAD;载入波特率
mov t2con,#34h
setb p1.0;将485置为接收状态
mov scon,#0D0h;初始化并启动串口
SETB ES;开中断
SETB PS;串口中断优先
CLR PS
sjmp ie_OK
ie_1: JNB 25H.1,IE_OK
mov RCAP2H,#0ffh
mov RCAP2L,#0ffh
mov t2con,#04h
SETB PT2
IE_OK: SETB 20H.0 ;仪表启动标志
mov 2fh,#0;
lcall ie_ch;启动通道
;clr p1.2
;clr p1.3
;/////////////////////////////////////////////////
;/显示程序/
main2: ;启动看门狗以及定时时间为4S
MOV WDT_CONTR,#34H
setb et0
setb tr0
main20: JB 20H.7,MAIN3;查看A/D是否运行
lCALL IE_SET ;启动测量初始化
SETB 20H.7 ;测量启动标记
main3: ;A.数据校验
ACALL DATA_CHECK;数据校验
;B.测量频率计算
ACALL CY_HZ;计算
;C.显示比例值计算
acall dis_scale
;D:计算平均值
acall Hz_av
;E:上下限报警
ACALL ALARM_OUTPUT
;F:RS485通讯/变送输出
LCALL COMMUNICATION
;g:按键处理
LCALL SETKEY
LCALL SHIFTKEY
LCALL DOWKEY
LCALL ATKEY
;h:BCD码转换
ACALL bcdCode;bcd码转换
AJMP MAIN2;重新回到MAIN2
;//////////////////////////////////////
;A/D转换采样启动程序
IE_SET: MOV 1eH,#4;INT1不中断等待次数
MOV 1fH,#0;T0定时循环次数
MOV 1cH,#0;采样脉冲个数缓冲器
MOV 1dH,#0
MOV TMOD,#00010001B;T1,T0为16位定时器.
;再次初始化T1;int1
setb ea;再次启动中断
setb et1
clr tr1
mov tl1,#0
mov th1,#0
setb tr1
CLR IE1; 清除int1中断标志
SETB EX1;开启INT1中断
RET
;********************
;测量通道设置
ie_ch: push dpl
push dph
ie_ch1: mov a,2fh
ie_ch2: rl a;左移
cjne a,#7,ie_ch20;A/D转换共5次循环
ie_ch20: jc ie_ch21
clr a
ie_ch21: mov dptr,#ie_ch3
jmp @a+dptr
nop
nop
;通道循环表
ie_ch3: sjmp ie_offset ;零点偏移测量;0
sjmp ie_pa;A相过程值1
sjmp ie_pb;B相过程值2
sjmp ie_pc;C相过程值3
nop
nop
;4051 地址引脚排列 (9) (10 ) (11) 为地址 A2(c) A1(b) A0(a).
;CPU控制引脚: (Gnd) (p1.6) (p1.7)
;地址对应关系:000-- 0 0 0------PC通道(13PIN)
;001---0 0 1-----PB通道(14PIN)
;002---0 1 0-----PA通道(15PIN)
;003---0 1 1-----offset通道(12PIN)
;004---0-----GND
;005---0-----GND
;006---0-----GND
;007---0-----GND
;PA测量
ie_pa: nop
;功能检查
setb p1.6
clr p1.7
ie_ch_com: pop dph
pop dpl
ret
nop
;PB测量
ie_pb: setb p1.7
clr p1.6
sjmp ie_ch_com
;PC测量
ie_pc: CLR p1.7
clr p1.6
sjmp ie_ch_com
;零点偏移OFFSET测量0通道,硬件连接4051 的13引脚
ie_offset: SETB p1.7
SETB p1.6
sjmp ie_ch_com
nop
nop
;**************************
;频率计算
NOSWAP:
RET
nop
CY_HZ: JNB 3EH,NOSWAP;无采样结束标志
CLR 20H.7;清除测量挂起标记
CLR 3EH;清除测量结束标记
;T0中断次数浮点数转换
cy_hz_1: CLR 3CH
MOV R2,#0
MOV R3,1fh
MOV R1,#08H
LCALL INTF;浮点数存储08H 09H 0AH
;T0中断次数计算成时间周期;每中断1次时间为65536uS
MOV 0BH,#17;65536
MOV 0CH,#80H
MOV 0DH,#00H
MOV R0,#0BH
LCALL FMUL;
mov r1,#08h
LCALL FSTR;存储08H 09H 0AH
;T0剩余时间浮点数转换
MOV R3,1Bh
MOV R2,1Ah
MOV R1,#0BH
LCALL INTF;T0内检测到的时间转换浮点数存入0BH
;计算超出定时60mS以外的时间周期
MOV R0,#08H
CLR 3AH
LCALL FABP;T0+08H内时间和
LCALL FSTR;存储0BH,0CH 0DH
;计数总时间周期
MOV 08H,#18;65.535*2mS
MOV 09H,#80H
MOV 0AH,#0h
CLR 3AH
LCALL FABP;定时时间+T0+30H得到检测总时间
LCALL FSTR;存储0BH 0CH 0DH
;---------------------------------------
;在定时周期内采样到的脉冲个数转换成浮点数
MOV R2,1ch;测量周期个数转换浮点数
MOV R3,1dH
mov r1,#08h
Lcall intf;数据存放在08H 09H AH
;计算频率值
MOV R0,#08H
MOV R1,#0bH
LCALL Fdiv;频率
LCALL FSTR;存储0b 0c 0d
mov 08h,#20
mov 09h,#0f4h
mov 0ah,#24h
Lcall fmul
; Lcall fstr
mov a,2fh
jnz time_1
;(零点测量)
; mov 10h,0bh
; mov 11h,0ch
; mov 12h,0dh
MOV R1,#10H
; lcall fstr
sjmp TIME_4
nop
nop
time_1: ; mov r0,#0bh
; mov r1,#10h
; setb 3ah
; Lcall fabp
mov a,2fh
cjne a,#1,time_2
;第二次采样值存放到30H 31H 32H 地址(PA过程值测量)
; mov 36h,0bh
; mov 37h,0ch
; mov 38h,0dh
mov r1,#30h
; Lcall fstr
sjmp time_4
; nop
; nop
time_2: cjne a,#2,time_3
;第3次采样值存放33H 34H 35H (PB过程值测量)
; mov 33h,0bh
; mov 34h,0ch
; mov 35h,0dh
mov r1,#33H
; Lcall fstr
Sjmp time_4
;第4次采样值存放36H 37H 38H (PC过程值测量)
time_3: MOV R1,#36H
setb 20h.6;置A/D转换结束标志,用于过程值计算
INC 0EH;A/D转换计数器,用于延迟报警/数据刷新
; mov 30h,0bh
; mov 31h,0ch
; mov 32h,0dh
TIME_4: LCALL FSTR
;通道切换
TIME_COM: INC 2FH
mov a,2fh
cjne a,#4,time_COM0
time_COM0: jc time_COM1
mov 2fh,#0
time_COM1: acall ie_ch
ret
热心网友
时间:2023-10-20 04:19
程序源代码
ORG 0000H ;主程序的入口地址
LJMP MAIN ;跳转到主程序的开始处
ORG 0003H ;外部中断0的中断程序入口地址
ORG 000BH ;定时器0的中断程序入口地址
LJMP T0_INT ;跳转到中断服务程序处
ORG 0013H ;外部中断1的中断程序入口地址
MAIN : MOV SP,#50H
MOV IE,#8EH ;CPU开中断,允许T0中断,T1中断和外部中断1中断
MOV TMOD,#51H ;设置T1为计数方式,T0为定时方式,且都工作于模式1
MOV TH1,#00H ;T1计数器清零
MOV TL1,#00H
SETB TR1 ;启动T1计时器
SETB EX1 ;允许INT1中断
SETB IT1 ;选择边沿触发方式
MOV DPTR ,#0003H
MOV A, #80H ;给8255赋初值,8255工作于方式0
MOVX @DPTR, A
AGAIN: JB P3.1,N0 ;判断是否要设定东西方向红绿灯时间的初值,若P3.1为1 则跳转
MOV A,P1
JB P1.7,RED ;判断P1.7是否为1,若为1则设定红灯时间,否则设定绿灯时间
MOV R0,#00H ;R0清零
MOV R0,A ;存入东西方向绿灯初始时间
MOV R3,A
LCALL DISP1
LCALL DELAY
AJMP AGAIN
RED: MOV A,P1
ANL A,#7FH ;P1.7置0
MOV R7,#00H ;R7清零
MOV R7,A ;存入东西方向红灯初始时间
MOV R3,A
LCALL DISP1
LCALL DELAY
AJMP AGAIN
;-------------------------------------------
N0: SETB TR0 ;启动T0计时器
MOV 76H,R7 ;红灯时间存入76H
N00: MOV A,76H ;东西方向禁止,南北方向通行
MOV R3,A
MOV DPTR,#0000H ;置8255A口,东西方向红灯亮,南北方向绿灯亮
MOV A,#0DDH
MOVX @DPTR, A
N01: JB P2.0,B0
N02: SETB P3.0
CJNE R3,#00H,N01 ;比较R3中的值是否为0,不为0转到当前指令处执行
;------黄灯闪烁5秒程序------
N1: SETB P3.0
MOV R3,#05H
MOV DPTR,#0000H ;置8255A口,东西,南北方向黄灯亮
MOV A,#0D4H
MOVX @DPTR,A
N11: MOV R4,#00H
N12: CJNE R4,#7DH,$ ;黄灯持续亮0.5秒
N13: MOV DPTR,#0000H ; 置8255A口,南北方向黄灯灭
MOV A,#0DDH
MOVX @DPTR,A
N14: MOV R4,#00H
CJNE R4,#7DH,$ ;黄灯持续灭0.5秒
CJNE R3,#00H,N1 ;闪烁时间达5秒则退出
;------------------------------------------------------------
N2: MOV R7,#00H
MOV A,R0 ;东西通行,南北禁止
MOV R3,A
MOV DPTR,#0000H ; 置8255A口,东西方向绿灯亮,南北方向红灯亮
MOV A,#0EBH
MOVX @DPTR,A
N21: JB P2.0,T03
N22: CJNE R3,#00H,N21
;------黄灯闪烁5秒程序------
N3: MOV R3,#05H
MOV DPTR,#0000H ;置8255A口,东西,南北方向黄灯亮
MOV A,#0E2H
MOVX @DPTR,A
N31: MOV R4,#00H
CJNE R4,#7DH,$ ;黄灯持续亮0.5秒
N32: MOV DPTR,#0000H ; 置8255A口,南北方向黄灯灭
MOV A,#0EBH
MOVX @DPTR,A
N33: MOV R4,#00H
CJNE R4,#7DH,$ ;黄灯持续灭0.5秒
CJNE R3,#00H,N3 ;闪烁时间达5秒则退出
SJMP N00
;------闯红灯报警程序------
B0: MOV R2,#03H ;报警持续时间3秒
B01: MOV A,R3
JZ N1 ;若倒计时完毕,不再报警
CLR P3.0 ;报警
CJNE R2,#00H,B01 ;判断3秒是否结束
SJMP N02
;------1秒延时子程序-------
N7: RETI
T0_INT:MOV TL0,#9AH ;给定时器T0送定时10ms的初值
MOV TH0,#0F1H
INC R4
INC R5
CJNE R5,#0FAH,T01 ;判断延时是否够一秒,不够则调用显示子程序
MOV R5,#00H ;R5清零
DEC R3 ;倒计时初值减一
DEC R2 ;报警初值减一
T01: ACALL DISP ;调用显示子程序
RETI ;中断返回
;------显示子程序------
DISP: JNB P2.4,T02
DISP1: MOV B,#0AH
MOV A,R3 ;R3中值二转十显示转换
DIV AB
MOV 79H,A
MOV 7AH,B
DIS: MOV A,79H ;显示十位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0F7H
MOVX @DPTR,A
LCALL DELAY
DS2: MOV A,7AH ;显示个位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0FBH
MOVX @DPTR,A
RET
;------东西方向车流量检测程序------
T03: MOV A,R3
SUBB A,#00H ;若绿灯倒计时完毕,不再检测车流量
JZ N3
JB P2.0,T03
INC R7
CJNE R7,#64H,E1
MOV R7,#00H ;中断到100次则清零
E1: SJMP N22
;------东西方向车流量显示程序------
T02: MOV B,#0AH
MOV A,R7 ;R7中值二转十显示转换
DIV AB
MOV 79H,A
MOV 7AH,B
DIS3: MOV A,79H ;显示十位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0F7H
MOVX @DPTR,A
LCALL DELAY
DS4: MOV A,7AH ;显示个位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0FBH
MOVX @DPTR,A
LJMP N7
;------延时4MS子程序----------
DELAY: MOV R1,#0AH
LOOP: MOV R6,#64H
NOP
LOOP1: DJNZ R6,LOOP1
DJNZ R1,LOOP
RET
;------字符表------
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
ORG 0000H
AJMP MAIN
ORG 000BH
LJMP INT
ORG 0030H
MAIN:MOV R2,#20H
MOV TMOD,#01H
MOV TL0,#0B0H
MOV TH0,#80H
SETB EA
SETB ET0
SETB TR0
LOOP:MOV A,#01H
MOV P1,A
LCALL DEL
MOV R0,#02H
LCALL FP
LOOP1:MOV A,#02H
MOV P1,A
LCALL DEL
MOV R0,#02H
LCALL FP
LOOP2:MOV A, #04H
MOV P1,A
LCALL DEL
MOV R0,#05H
LCALL FP
MOV P1,#00H
LCALL DEL
CJNE R0,#00H ,AA
SJMP LOOP
FP:MOV R1,#80H
MOV A,R1
MOV DPTR,#3FFFH
MOVX @DPTR,A
RR A
MOV R1,A
MOV A,R0
ANL A,#0FH
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#5FFFH
MOVX @DPTR,A
LCALL DEL
MOV A,#0FFH
MOV DPTR,#5FFFH
MOVX @DPTR,A
MOV A,R1
MOV DPTR,#3FFFH
MOVX @DPTR,A
MOV A,R0
ANL A,#0F0H
SWAP A
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#5FFFH
MOVX @DPTR,A
LCALL DEL
MOV A,#0FFH
MOV DPTR,#5FFFH
MOVX @DPTR,A
CJNE R0,#99H,FP
RET
DEL:MOV R5,#100H
DEL0:MOV R6,#250H
DEL1:DJNZ R6,DEL1
DJNZ R5,DEL0
RET
INT: CLR ET0
DJNZ R2,GOON
MOV A,R0
ADD A,#99H
DA A
MOV R0,A
MOV R2,#20H
GOON:MOV TMOD,#01H
MOV TL0,#0B0H
MOV TH0,#80H
SETB EA
SETB ET0
SETB TR0
RETI
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
参考资料:http://zhidao.baidu.com/question/52957562.html?fr=qrl
热心网友
时间:2023-10-20 04:19
去买一本书吧!单片机原理与应用,你可能还不杂个会吧,这个你得慢慢来,只要你把那本书学会了差不多你能看会了,你可能还很年轻吧,要慢慢来,别人给你说没的意思的,年轻嘛慢慢来,我也是这样来的,我看过你这个还是简单的,我是搞仪表的,你看看我的程序吧!!! 十分之一
文件名:*******.ASM
;* 型号 : M603-VA
;* 产品名称:4位三相电流/电压表
;* PCB硬件:M603-3P-VA-01(01)/M603-3P-VA-03(01)
;* 实现功能:(1)可测三相三线电压/电流
;(2)对输入电流/电压值做任意刻度显示
;* 版本号: 第1.0版
;* 起草日期:2006.3.30 最后修改日期: 2006.8.16
;* 修改日志:
;* V1.1 解决测量漂移问题
;* 完善1:LiuQK-2007.1.1
;* 1、增加RS485通讯功能
;* 2、增加变送功能
;* 3、增加上下限报警
;//////////////////////////////////////////////////////////////
ORG 0000
AJMP MAIN
ORG 0003H;INT0中断入口地址停电保存
;ljmp irq_int0
NOP
NOP
LJMP Err;程序飞跑,转到处理程序,重新启动.
ORG 000BH;T0中断入口, 用于显示定时
LJMP IRQ_t0
NOP
NOP
LJMP Err;程序飞跑,转到处理程序,重新启动.
ORG 0013H;INT1中断口地址
LJMP IRQ_int1
NOP
NOP
LJMP Err;程序飞跑,转到处理程序,重新启动.
ORG 001BH;T1中断入口 用于A/D转换
ljmp irq_t1
NOP
NOP
LJMP Err;程序飞跑,转到处理程序,重新启动.
ORG 23H
LJMP IRQ_UART;用于RS-485通讯
NOP
NOP
LJMP Err
org 002bh ;D/A
ljmp irq_t2
nop
nop
LJMP Err
;////////////////////////////////////////////////
;主程序从MAIN开始 执行
;////////////////////////////////////////////////
;////////////////////////////////////////////////
;STC单片机附加功能宏定义
P4 DATA 0e8h;P4口地址
WDT_CONTR DATA 0E1H;看门狗控制地址
AUXR DATA 8EH ;只写寄存器,只能用MOV AUXR,#DATA 命令. 用于控制扩展RAM和使能ALE.
AUXR1 DATA 0A2H;本寄存器用于数据指针选择://=0 选择DPTR0 , =1 选择DPTR1 //
XICON DATA 0C0H;特殊功能寄存器申明
;89C52定时器T2
;T2CON DATA 0C8H
;TH2 DATA 0CDH
;TL2 DATA 0CCH
;RCAP2H DATA 0CBH
;RCAP2L DATA 0CAH
;RL2 BIT 0C8H.0
;CT2 BIT 0C8H.1
;TR2 BIT 0C8H.2
;EXEN2 BIT 0C8H.3
;TCLK BIT 0C8H.4
;RCLK BIT 0C8H.5
;EXF2 BIT 0C8H.6
;TF2 BIT 0C8H.7
;ET2 BIT 0A8H.5
;PT2 BIT 0B8H.5
ORG 35h
MAIN: mov r0,#0Ffh
FILL: clr a
MOV @R0,A
DJNZ R0,FILL;(填充)初始化RAM内的数据全部为00H。
mov psw,#0
MOV SP,#80H;堆栈指针
MOV AUXR,#00
MOV CHECK_CODE,#0AAH
ACALL DATA_CHECK;数据校验
; setb 21h.0;置仪表起动标志
;EA中断允许,ET1中断允许,ET0中断允许
SETb ea ;EA中断允许
setb IT1;INT1中断方式是负边沿触发方式
setb it0;INT0中断方式是负边沿触发方式
mov pcon,#00h;
SETB PT0
CLR PX0
CLR PT1
CLR PX1
;SETB PX1
setb et0;T0中断允许
setb ET2
JNB 25H.2,IE_1
LCALL R_LOAD;载入波特率
mov t2con,#34h
setb p1.0;将485置为接收状态
mov scon,#0D0h;初始化并启动串口
SETB ES;开中断
SETB PS;串口中断优先
CLR PS
sjmp ie_OK
ie_1: JNB 25H.1,IE_OK
mov RCAP2H,#0ffh
mov RCAP2L,#0ffh
mov t2con,#04h
SETB PT2
IE_OK: SETB 20H.0 ;仪表启动标志
mov 2fh,#0;
lcall ie_ch;启动通道
;clr p1.2
;clr p1.3
;/////////////////////////////////////////////////
;/显示程序/
main2: ;启动看门狗以及定时时间为4S
MOV WDT_CONTR,#34H
setb et0
setb tr0
main20: JB 20H.7,MAIN3;查看A/D是否运行
lCALL IE_SET ;启动测量初始化
SETB 20H.7 ;测量启动标记
main3: ;A.数据校验
ACALL DATA_CHECK;数据校验
;B.测量频率计算
ACALL CY_HZ;计算
;C.显示比例值计算
acall dis_scale
;D:计算平均值
acall Hz_av
;E:上下限报警
ACALL ALARM_OUTPUT
;F:RS485通讯/变送输出
LCALL COMMUNICATION
;g:按键处理
LCALL SETKEY
LCALL SHIFTKEY
LCALL DOWKEY
LCALL ATKEY
;h:BCD码转换
ACALL bcdCode;bcd码转换
AJMP MAIN2;重新回到MAIN2
;//////////////////////////////////////
;A/D转换采样启动程序
IE_SET: MOV 1eH,#4;INT1不中断等待次数
MOV 1fH,#0;T0定时循环次数
MOV 1cH,#0;采样脉冲个数缓冲器
MOV 1dH,#0
MOV TMOD,#00010001B;T1,T0为16位定时器.
;再次初始化T1;int1
setb ea;再次启动中断
setb et1
clr tr1
mov tl1,#0
mov th1,#0
setb tr1
CLR IE1; 清除int1中断标志
SETB EX1;开启INT1中断
RET
;********************
;测量通道设置
ie_ch: push dpl
push dph
ie_ch1: mov a,2fh
ie_ch2: rl a;左移
cjne a,#7,ie_ch20;A/D转换共5次循环
ie_ch20: jc ie_ch21
clr a
ie_ch21: mov dptr,#ie_ch3
jmp @a+dptr
nop
nop
;通道循环表
ie_ch3: sjmp ie_offset ;零点偏移测量;0
sjmp ie_pa;A相过程值1
sjmp ie_pb;B相过程值2
sjmp ie_pc;C相过程值3
nop
nop
;4051 地址引脚排列 (9) (10 ) (11) 为地址 A2(c) A1(b) A0(a).
;CPU控制引脚: (Gnd) (p1.6) (p1.7)
;地址对应关系:000-- 0 0 0------PC通道(13PIN)
;001---0 0 1-----PB通道(14PIN)
;002---0 1 0-----PA通道(15PIN)
;003---0 1 1-----offset通道(12PIN)
;004---0-----GND
;005---0-----GND
;006---0-----GND
;007---0-----GND
;PA测量
ie_pa: nop
;功能检查
setb p1.6
clr p1.7
ie_ch_com: pop dph
pop dpl
ret
nop
;PB测量
ie_pb: setb p1.7
clr p1.6
sjmp ie_ch_com
;PC测量
ie_pc: CLR p1.7
clr p1.6
sjmp ie_ch_com
;零点偏移OFFSET测量0通道,硬件连接4051 的13引脚
ie_offset: SETB p1.7
SETB p1.6
sjmp ie_ch_com
nop
nop
;**************************
;频率计算
NOSWAP:
RET
nop
CY_HZ: JNB 3EH,NOSWAP;无采样结束标志
CLR 20H.7;清除测量挂起标记
CLR 3EH;清除测量结束标记
;T0中断次数浮点数转换
cy_hz_1: CLR 3CH
MOV R2,#0
MOV R3,1fh
MOV R1,#08H
LCALL INTF;浮点数存储08H 09H 0AH
;T0中断次数计算成时间周期;每中断1次时间为65536uS
MOV 0BH,#17;65536
MOV 0CH,#80H
MOV 0DH,#00H
MOV R0,#0BH
LCALL FMUL;
mov r1,#08h
LCALL FSTR;存储08H 09H 0AH
;T0剩余时间浮点数转换
MOV R3,1Bh
MOV R2,1Ah
MOV R1,#0BH
LCALL INTF;T0内检测到的时间转换浮点数存入0BH
;计算超出定时60mS以外的时间周期
MOV R0,#08H
CLR 3AH
LCALL FABP;T0+08H内时间和
LCALL FSTR;存储0BH,0CH 0DH
;计数总时间周期
MOV 08H,#18;65.535*2mS
MOV 09H,#80H
MOV 0AH,#0h
CLR 3AH
LCALL FABP;定时时间+T0+30H得到检测总时间
LCALL FSTR;存储0BH 0CH 0DH
;---------------------------------------
;在定时周期内采样到的脉冲个数转换成浮点数
MOV R2,1ch;测量周期个数转换浮点数
MOV R3,1dH
mov r1,#08h
Lcall intf;数据存放在08H 09H AH
;计算频率值
MOV R0,#08H
MOV R1,#0bH
LCALL Fdiv;频率
LCALL FSTR;存储0b 0c 0d
mov 08h,#20
mov 09h,#0f4h
mov 0ah,#24h
Lcall fmul
; Lcall fstr
mov a,2fh
jnz time_1
;(零点测量)
; mov 10h,0bh
; mov 11h,0ch
; mov 12h,0dh
MOV R1,#10H
; lcall fstr
sjmp TIME_4
nop
nop
time_1: ; mov r0,#0bh
; mov r1,#10h
; setb 3ah
; Lcall fabp
mov a,2fh
cjne a,#1,time_2
;第二次采样值存放到30H 31H 32H 地址(PA过程值测量)
; mov 36h,0bh
; mov 37h,0ch
; mov 38h,0dh
mov r1,#30h
; Lcall fstr
sjmp time_4
; nop
; nop
time_2: cjne a,#2,time_3
;第3次采样值存放33H 34H 35H (PB过程值测量)
; mov 33h,0bh
; mov 34h,0ch
; mov 35h,0dh
mov r1,#33H
; Lcall fstr
Sjmp time_4
;第4次采样值存放36H 37H 38H (PC过程值测量)
time_3: MOV R1,#36H
setb 20h.6;置A/D转换结束标志,用于过程值计算
INC 0EH;A/D转换计数器,用于延迟报警/数据刷新
; mov 30h,0bh
; mov 31h,0ch
; mov 32h,0dh
TIME_4: LCALL FSTR
;通道切换
TIME_COM: INC 2FH
mov a,2fh
cjne a,#4,time_COM0
time_COM0: jc time_COM1
mov 2fh,#0
time_COM1: acall ie_ch
ret
热心网友
时间:2023-10-20 04:20
如下资料是否需要?
*******目录*******
一、设计要求
二、设计内容
三、交通信号灯模拟控制系统设计程序流程图
四、交通信号灯模拟控制系统原理图
五、交通信号灯模拟控制系统主程序
六、运行步骤
七、检测与调试
八、课程设计体会
九、参考文献
十、说明
=================================================
你好:
一份完整的单片机红绿灯的汇编语言程序设计已经发给你了,
如果觉得还满意,别忘了给分哦:)
热心网友
时间:2023-10-20 04:20
http://tieba.baidu.com/f?kz=108122033
http://www.baidu.com/s?ie=utf-8&tn=ylmf&&wd=%E5%8D%95%E7%89%87%E6%9C%BA%E7%BA%A2%E7%BB%BF%E7%81%AF%E7%9A%84%E6%B1%87%E7%BC%96%E8%AF%AD%E8%A8%80%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1
参考资料:http://tieba.baidu.com/f?kz=108122033
热心网友
时间:2023-10-20 04:21
这么难,我都看不懂,没法帮你了!
热心网友
时间:2023-10-20 04:19
程序源代码
ORG 0000H ;主程序的入口地址
LJMP MAIN ;跳转到主程序的开始处
ORG 0003H ;外部中断0的中断程序入口地址
ORG 000BH ;定时器0的中断程序入口地址
LJMP T0_INT ;跳转到中断服务程序处
ORG 0013H ;外部中断1的中断程序入口地址
MAIN : MOV SP,#50H
MOV IE,#8EH ;CPU开中断,允许T0中断,T1中断和外部中断1中断
MOV TMOD,#51H ;设置T1为计数方式,T0为定时方式,且都工作于模式1
MOV TH1,#00H ;T1计数器清零
MOV TL1,#00H
SETB TR1 ;启动T1计时器
SETB EX1 ;允许INT1中断
SETB IT1 ;选择边沿触发方式
MOV DPTR ,#0003H
MOV A, #80H ;给8255赋初值,8255工作于方式0
MOVX @DPTR, A
AGAIN: JB P3.1,N0 ;判断是否要设定东西方向红绿灯时间的初值,若P3.1为1 则跳转
MOV A,P1
JB P1.7,RED ;判断P1.7是否为1,若为1则设定红灯时间,否则设定绿灯时间
MOV R0,#00H ;R0清零
MOV R0,A ;存入东西方向绿灯初始时间
MOV R3,A
LCALL DISP1
LCALL DELAY
AJMP AGAIN
RED: MOV A,P1
ANL A,#7FH ;P1.7置0
MOV R7,#00H ;R7清零
MOV R7,A ;存入东西方向红灯初始时间
MOV R3,A
LCALL DISP1
LCALL DELAY
AJMP AGAIN
;-------------------------------------------
N0: SETB TR0 ;启动T0计时器
MOV 76H,R7 ;红灯时间存入76H
N00: MOV A,76H ;东西方向禁止,南北方向通行
MOV R3,A
MOV DPTR,#0000H ;置8255A口,东西方向红灯亮,南北方向绿灯亮
MOV A,#0DDH
MOVX @DPTR, A
N01: JB P2.0,B0
N02: SETB P3.0
CJNE R3,#00H,N01 ;比较R3中的值是否为0,不为0转到当前指令处执行
;------黄灯闪烁5秒程序------
N1: SETB P3.0
MOV R3,#05H
MOV DPTR,#0000H ;置8255A口,东西,南北方向黄灯亮
MOV A,#0D4H
MOVX @DPTR,A
N11: MOV R4,#00H
N12: CJNE R4,#7DH,$ ;黄灯持续亮0.5秒
N13: MOV DPTR,#0000H ; 置8255A口,南北方向黄灯灭
MOV A,#0DDH
MOVX @DPTR,A
N14: MOV R4,#00H
CJNE R4,#7DH,$ ;黄灯持续灭0.5秒
CJNE R3,#00H,N1 ;闪烁时间达5秒则退出
;------------------------------------------------------------
N2: MOV R7,#00H
MOV A,R0 ;东西通行,南北禁止
MOV R3,A
MOV DPTR,#0000H ; 置8255A口,东西方向绿灯亮,南北方向红灯亮
MOV A,#0EBH
MOVX @DPTR,A
N21: JB P2.0,T03
N22: CJNE R3,#00H,N21
;------黄灯闪烁5秒程序------
N3: MOV R3,#05H
MOV DPTR,#0000H ;置8255A口,东西,南北方向黄灯亮
MOV A,#0E2H
MOVX @DPTR,A
N31: MOV R4,#00H
CJNE R4,#7DH,$ ;黄灯持续亮0.5秒
N32: MOV DPTR,#0000H ; 置8255A口,南北方向黄灯灭
MOV A,#0EBH
MOVX @DPTR,A
N33: MOV R4,#00H
CJNE R4,#7DH,$ ;黄灯持续灭0.5秒
CJNE R3,#00H,N3 ;闪烁时间达5秒则退出
SJMP N00
;------闯红灯报警程序------
B0: MOV R2,#03H ;报警持续时间3秒
B01: MOV A,R3
JZ N1 ;若倒计时完毕,不再报警
CLR P3.0 ;报警
CJNE R2,#00H,B01 ;判断3秒是否结束
SJMP N02
;------1秒延时子程序-------
N7: RETI
T0_INT:MOV TL0,#9AH ;给定时器T0送定时10ms的初值
MOV TH0,#0F1H
INC R4
INC R5
CJNE R5,#0FAH,T01 ;判断延时是否够一秒,不够则调用显示子程序
MOV R5,#00H ;R5清零
DEC R3 ;倒计时初值减一
DEC R2 ;报警初值减一
T01: ACALL DISP ;调用显示子程序
RETI ;中断返回
;------显示子程序------
DISP: JNB P2.4,T02
DISP1: MOV B,#0AH
MOV A,R3 ;R3中值二转十显示转换
DIV AB
MOV 79H,A
MOV 7AH,B
DIS: MOV A,79H ;显示十位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0F7H
MOVX @DPTR,A
LCALL DELAY
DS2: MOV A,7AH ;显示个位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0FBH
MOVX @DPTR,A
RET
;------东西方向车流量检测程序------
T03: MOV A,R3
SUBB A,#00H ;若绿灯倒计时完毕,不再检测车流量
JZ N3
JB P2.0,T03
INC R7
CJNE R7,#64H,E1
MOV R7,#00H ;中断到100次则清零
E1: SJMP N22
;------东西方向车流量显示程序------
T02: MOV B,#0AH
MOV A,R7 ;R7中值二转十显示转换
DIV AB
MOV 79H,A
MOV 7AH,B
DIS3: MOV A,79H ;显示十位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0F7H
MOVX @DPTR,A
LCALL DELAY
DS4: MOV A,7AH ;显示个位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0FBH
MOVX @DPTR,A
LJMP N7
;------延时4MS子程序----------
DELAY: MOV R1,#0AH
LOOP: MOV R6,#64H
NOP
LOOP1: DJNZ R6,LOOP1
DJNZ R1,LOOP
RET
;------字符表------
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
ORG 0000H
AJMP MAIN
ORG 000BH
LJMP INT
ORG 0030H
MAIN:MOV R2,#20H
MOV TMOD,#01H
MOV TL0,#0B0H
MOV TH0,#80H
SETB EA
SETB ET0
SETB TR0
LOOP:MOV A,#01H
MOV P1,A
LCALL DEL
MOV R0,#02H
LCALL FP
LOOP1:MOV A,#02H
MOV P1,A
LCALL DEL
MOV R0,#02H
LCALL FP
LOOP2:MOV A, #04H
MOV P1,A
LCALL DEL
MOV R0,#05H
LCALL FP
MOV P1,#00H
LCALL DEL
CJNE R0,#00H ,AA
SJMP LOOP
FP:MOV R1,#80H
MOV A,R1
MOV DPTR,#3FFFH
MOVX @DPTR,A
RR A
MOV R1,A
MOV A,R0
ANL A,#0FH
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#5FFFH
MOVX @DPTR,A
LCALL DEL
MOV A,#0FFH
MOV DPTR,#5FFFH
MOVX @DPTR,A
MOV A,R1
MOV DPTR,#3FFFH
MOVX @DPTR,A
MOV A,R0
ANL A,#0F0H
SWAP A
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#5FFFH
MOVX @DPTR,A
LCALL DEL
MOV A,#0FFH
MOV DPTR,#5FFFH
MOVX @DPTR,A
CJNE R0,#99H,FP
RET
DEL:MOV R5,#100H
DEL0:MOV R6,#250H
DEL1:DJNZ R6,DEL1
DJNZ R5,DEL0
RET
INT: CLR ET0
DJNZ R2,GOON
MOV A,R0
ADD A,#99H
DA A
MOV R0,A
MOV R2,#20H
GOON:MOV TMOD,#01H
MOV TL0,#0B0H
MOV TH0,#80H
SETB EA
SETB ET0
SETB TR0
RETI
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
参考资料:http://zhidao.baidu.com/question/52957562.html?fr=qrl
热心网友
时间:2023-10-20 04:20
如下资料是否需要?
*******目录*******
一、设计要求
二、设计内容
三、交通信号灯模拟控制系统设计程序流程图
四、交通信号灯模拟控制系统原理图
五、交通信号灯模拟控制系统主程序
六、运行步骤
七、检测与调试
八、课程设计体会
九、参考文献
十、说明
=================================================
你好:
一份完整的单片机红绿灯的汇编语言程序设计已经发给你了,
如果觉得还满意,别忘了给分哦:)
热心网友
时间:2023-10-20 04:20
http://tieba.baidu.com/f?kz=108122033
http://www.baidu.com/s?ie=utf-8&tn=ylmf&&wd=%E5%8D%95%E7%89%87%E6%9C%BA%E7%BA%A2%E7%BB%BF%E7%81%AF%E7%9A%84%E6%B1%87%E7%BC%96%E8%AF%AD%E8%A8%80%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1
参考资料:http://tieba.baidu.com/f?kz=108122033
热心网友
时间:2023-10-20 04:21
这么难,我都看不懂,没法帮你了!