SMP_1 EQU 31H ;定义两次采样存储地址标号
SMP_2 EQU 33H
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:JNB P3.2,MAIN ;检测启动信号
MOV R2,#00H
MOV R1,#03H ;采样两次
INIT:MOV R3,#00H ;低八位寄存器
MOV R4,#00H ;高两位寄存器
MOV R5,#00H ;R5,R6用在延时子程序中
MOV R6,#00H
MOV A,#00H
CLR P3.4 ;检测通过指示灯(绿色)
CLR P3.5 ;检测未通过指示灯(红色)
CLR C
START:
MOV A,R2
MOV P0,A ;向译码器送出继电器选择号
SETB P3.0 ;产生下降沿,译码器锁存输入信号
CLR P3.0
LCALL DELAY_1
SAMPL: ;采样
MOV R0,#31H
SAMPL_1:
CLR P3.1
WAIT:JB P3.3,WAIT
SETB P3.1
MOV A,P1
MOV @R0,A
INC R0
MOV A,P2
MOV @R0,A
INC R0
LCALL DELAY_2
JUDGE:
DJNZ R1,SAMPL_1
COMPUTE: ;两次采样值求和
CLR C
MOV R0,#33H
MOV A,@R0
DEC R0
DEC R0
ADDC A,@R0
MOV R3,A
INC R0
MOV A,@R0
INC R0
INC R0
ADDC A,@R0
MOV R4,A
ROTATE: ;计算两次采样值的平均值
MOV A,R4
MOV C,ACC.0
RR A
MOV R4,A
MOV A,R3
RR A
MOV ACC.7,C
MOV R3,A
COMPARE: ;将采样平均值与给定的取值范围进行比较
CLR C
MOV A,R4
SUBB A,#06H
JNZ LR
MOV A,R3
SUBB A,#0A7H
JC LR
SUBB A,#0C0H
JNC LR
NEXT:INC R2
CLR C
MOV A,R2
SUBB A,#0FH
JNC INIT
LG: SETB P3.5 ;亮绿灯
AJMP JIESHU
LR: SETB P3.4 ;亮红灯
AJMP JIESHU
DELAY_1: ;100ms延时
MOV R5,#0F9H
L1: MOV R6,#0C8H
W1: DJNZ R5,W1
DJNZ R6,L1
RET
DELAY_2: ;10ms延时
MOV R5,#0F9H
L2: MOV R6,#14H
W2: DJNZ R5,W2
DJNZ R6,L2
RET
JIESHU:
NOP
NOP
END
可是我换成其他空闲地址单元还是一样的啊~
追答我这边用步进测试是正常的,寄存器A和R0都有数值。
µVision4 IDE 编程环境,Proteus 7 Professional 7.7sp2仿真环境程序步进联调。
AT89C51单片机怎么用汇编语言让4个数码管同时显示1234?
1、首先我们先打开keil。2、接着,我们要定义好库函数,void main(){while(1)\/\/不断循环显示{dispaly();}}void dispaly(){P0=smg[1];\/\/选择显示数字几,P1=0x7f;\/\/控制是否点亮数码管。3、接着,我们加上一条循环语句。delay(5);\/\/显示5毫秒P0=0XFF;\/\/消影P0=smg[2];P1=0xbf;delay...
编一个AT89C51单片机00 —99 秒的汇编程序,要求有循环和暂停,用两个...
;P2.3接 J2 A端子,标志位码锁存 LATCH1 BIT P2.2 LATCH2 BIT P2.3 ORG 00H JMP START ORG 0BH JMP TIM0 START:MOV R3,#00 ;中断循环次数 MOV R4,#0 ;时间初值 MOV DPTR,#TABLE MOV SP,#40H MOV TMOD,#01H ;定时器工作方式 MOV TH0,#HIGH(65536-3800)MOV TL0,#LOW...
AT89C51单片机汇编语言有一个错误,求大侠帮助 error C129: missing...
这个基本上得重写,语法错误太多:MAIN: DT EQU B DATA EQU 0 DDR EQU 1 。。。DJNZ D1 。。。
谁能告诉我用单片机AT89C51怎么制作一个3个共阴极的数码管,让十位...
loop:mov p2,#0feh mov r0,#0 clr a acall key loop1:mov r1,#8 out:mov a,r0 movc a,@a+dptr mov p3,a inc r0 acall delay mov a,p2 rl a mov p2,a djnz r1,out sjmp loop key:jnb p1.0,key1 mov dptr,#table ret key1:mov dptr,#table1 ljmp loop1 table1: db ...
基于AT89C51单片机和DS18B20温度传感器、LCD1602液晶显示的数字温度计...
只是LCD1602的代码 ;多功能51单片机开发板 ;LCD1602测试程序 RS EQU P2.0 RW EQU P2.1 E EQU P2.2 LDATA EQU P1 ORG 0000H AJMP MAIN ORG 0030H MAIN: MOV R0,#00H ;R0:每行显示字符的个数 MOV R1,#80H ;寄存器地址 MOV A,#38H ;设置显示(16×2)ACALL WIR MOV A...
单片机课程设计:交通灯控制!
我给你发一个看看,是protues的仿真电路图,可以运行看效果,还有keil的汇编程序,有邮箱给你发去我给你发了啊!!!下边是程序:org 0000h sjmp mainorg 0030hmain: mov p0,#11101110b acall del1 acall del1 acall del1 acall mmm mov p0,#11011011b acall del1 acall del1 mov p0,#11110101b lcall ...
怎么用C语言做单片机的精确延时
1 C语言程序延时 Keil C51的编程语言常用的有2种: 一种是汇编语言;另一种是C 语言。用汇编语言写单片机程序时,精确时间延时是相对容易解决的。比如,用的是晶振频率为12 MHz的AT89C51,打算延时20 μs,51单片机的指令周期是晶振频率的1\/12,即一个机器周期为1 μs;“MOV R0,#X”需要2个...
有线鼠标改无线鼠标为什么要编译码啊
该驱动程序经Keil uVision2编译,在AT89C51单片机上运行通过,实现了对PS\/2 104键盘的支持,以及对字符按键大小写切换,num lock切换,控制键及组合按键的支持。该程序对其他嵌入式或单片机系统中PS\/2键盘的应用也有借鉴意义。参考文献1Adam Chapweske. The ATPS\/2 Keyboard Interface. 2Adam Chapweske. PS\/2 Mouse\/...
常见的存储器有哪些?有哪些使用注意事项?
这里用到了四条汇编指令:clr、 setb、 ljmp 、end;clr:是将其后面指定的位清为0;setb:是将其后面指定的位置成1;ljmp:是无条件跳转指令,意思是:跳转到指定的标号处继续运行。end:是一条告诉编译器:程序到此结束的伪指令。伪指令只告诉编译器此程序到此有何 要求或条件,它不参与和影响程序的执行。这里需要...
...图或原理方框图3,简述电路的基本工作原理或调试方
抖动的方法处理,软件的触点在闭合和断开的时候会产生抖动,这时触点的逻辑电 平是不稳定的,如不采取妥善处理的话,将引起按键命令错误或重复执行,在这里 采用软件延时的方法来避开抖动,延时时间20ms. 3 连击功能的实现 按下某键时,对应的功能键解释程序得到执行,如操作者没有释放按键,则对应 的功能会反复执行,好象...