| 超级好的51单片机编程例程!工程师必看! | ||
| 单片机简介与单片机的发展历史 |
I/O
口功能实例 |
|
| 定时器实例
(1秒报警,200hz输出 200-250变化输出) |
||
| 软件滤波十六进制六位数加法(数码显示) |
求六位和中的最大值和最小值(数码显示) |
|
| 求减去最大和最小值后的值(数码显示) |
除4所得软件滤波值(数码显示) |
|
| 软件模拟一个振 |
在显示频率输出的同时显示AD值(数码显示) |
|
| 过程检定(数码显示) |
||
| 按键数显,数码管显示加一 | ||
| PWM码简介及解码原理 |
||
| 智能定时的4位电子钟(带定时控制) |
智能红外工业控制器 |
|
|
51单片机学习网热心版主单片东东,收集整理的单片机教学课程(例子程序, 特别推荐!)转载请保留连接! 7.43
过程检定(数码显示) 程序实例(search.asm): ORG
0000H AJMP
MAIN ORG
001BH AJMP
DIN1 MAIN: ;定义频率200和300////////////////////////////////// F2H
EQU 30H F2L
EQU 31H F3H
EQU 32H F3L
EQU 33H ;////////////////////////////////////////////////// DISFLAG
EQU 34H ;显示标志 DISL
EQU 35H ;显示低位 DISH
EQU 36H ;显示高位 ADNUMBER
EQU 37H ;AD值 DISADL
EQU 38H ;显示AD低位 DISADH
EQU 39H ;显示AD高位 ADTIME
EQU 40H ;AD转换时间值 SCHNUMBER
EQU 41H ;搜频比较值 HOLDADL
EQU 42H 70 HOLDADH
EQU 43H ;搜到的AD值 HOLDFL
EQU 44H HOLDFH
EQU 45H ;搜到的频率值 ;////////////////////////////////////////////////// MOV
SCHNUMBER,#00H MOV
HOLDADL,#00H MOV
HOLDADH,#00H MOV
HOLDFL,#00H MOV
HOLDFH,#00H ;赋初值 ;///////////////////////////////////////////// ;定义频率保持初值///////////////////////////// MOV
R1,#100 MOV
R2,#02H ;///////////////////////////////////////////// MOV
ADNUMBER,#00H ;AD转换数初值 ;显示高低位初值/////////////////////////////// MOV
DISADL,#00H MOV
DISADH,#00H ;///////////////////////////////////////////// ;显示赋初值/////////////////////////////////// MOV
DISFLAG,#00H MOV
DISL,#00H MOV
DISH,#00H ;//////////////////////////////////////////// ;频率赋初值////////////////////////////////// MOV
F2H,#0F6H MOV
F2L,#3BH MOV
F3H,#0F8H 71 MOV
F3L,#2FH ;///////////////////////////////////////////// CLR
P1.0 ;在P1.0口产生一个低电平, 一个脉冲是由一个高电平和一个低电平组成的 MOV
TMOD,#00010000B;定时器工作于方式1 MOV
TH1,F2H MOV
TL1,F2L ;200HZ输出 SETB
EA ;开总中断 SETB
TR1 ;开定时器1运行 SETB
ET1 ;开定时器1允许 ADDIS:
ACALL AD ;呼叫AD子程序 ;将转换的数字量屏蔽高位低位送DISADL保存/////// MOV
A,ADNUMBER ANL
A,#0FH MOV
DISADL,A ;///////////////////////////////////////////// ;将转换的数字量屏蔽低位,将高位送DISADH保存//// MOV
A,ADNUMBER ANL
A,#0F0H SWAP
A MOV
DISADH,A ;///////////////////////////////////////////// DISPLAY: MOV
A,DISADL MOV
DPTR,#SETTAB MOVC
A,@A+DPTR MOV
SBUF,A D1:
JNB TI,D1 72 CLR
TI MOV
A,DISADH MOV
DPTR,#SETTAB MOVC
A,@A+DPTR MOV
SBUF,A D2:
JNB TI,D2 CLR
TI MOV
A,DISL MOV
DPTR,#SETTAB MOVC
A,@A+DPTR MOV
SBUF,A D3:
JNB TI,D3 CLR
TI MOV
A,DISH MOV
DPTR,#SETTAB MOVC
A,@A+DPTR MOV
SBUF,A D4:
JNB TI,D4 CLR
TI ACALL
DELAY ;过程检定,即模拟搜到极值////////////////////// MOV
A,ADNUMBER CLR
C SUBB
A,SCHNUMBER ;取AD值与初值比较 JNC
SW ;搜频是否完成,完成去显示搜到的值,没有继续搜// MOV
A,DISH CJNE
A,#05H,ADDIS1 73 MOV
A,DISL CJNE
A,#00H,ADDIS1 AJMP
DISSEARCH ;///////////////////////////////////////////// ;始终将初值赋于最大值,并将此时的频率与AD值保存 SW:
MOV SCHNUMBER,ADNUMBER MOV
HOLDADL,DISADL MOV
HOLDADH,DISADH MOV
HOLDFL,DISL MOV
HOLDFH,DISH ;///////////////////////////////////////////// CJNE
A,#05H,ADDIS1 MOV
A,DISL CJNE
A,#00H,ADDIS1 AJMP
DISSEARCH ADDIS1: AJMP
ADDIS ;搜到的频率与AD值显示///////////////////////// DISSEARCH: MOV
A,HOLDADL MOV
DPTR,#SETTAB MOVC
A,@A+DPTR MOV
SBUF,A D11:
JNB TI,D11 CLR
TI MOV
A,HOLDADH MOV
DPTR,#SETTAB MOVC
A,@A+DPTR 74 MOV
SBUF,A D12:
JNB TI,D12 CLR
TI MOV
A,HOLDFL MOV
DPTR,#SETTAB MOVC
A,@A+DPTR MOV
SBUF,A D13:
JNB TI,D13 CLR
TI MOV
A,HOLDFH MOV
DPTR,#SETTAB MOVC
A,@A+DPTR MOV
SBUF,A D14:
JNB TI,D14 CLR
TI ;///////////////////////////////////////////// LOOP:
AJMP LOOP DIN1: PUSH
ACC CPL
P1.0 ;取反P1.0口,实际是为了不断的将 p1.0的电平关系转换,即产生了频率 ;频率保持时间///////////////////////////////// DJNZ
R1,RE MOV
R1,#100 DJNZ
R2,RE MOV
R2,#02H ;///////////////////////////////////////////// INC
DISFLAG 75 MOV
A,DISFLAG CJNE
A,#0AH,FF MOV
DISFLAG,#00H INC
DISL MOV
A,DISL CJNE
A,#0AH,FF MOV
DISL,#00H INC
DISH ;///////////////////////////////////////////// FF:
MOV A,F2H CJNE
A,F3H,XIA ;频率高位到300HZ的高位 了吗? AJMP
JIA ;频率高位没到300HZ的高位值,直接将低位值加1//// XIA:
INC F2L MOV
A,F2L CJNE
A,#00H,RE INC
F2H MOV
A,F2H CJNE
A,F3H,RE ;///////////////////////////////////////////// ;频率高位加到300HZ的高位值了,低位加一,到300HZ的低 位值了吗,没到出去,到了关定时器////////////// JIA: INC
F2L ;到了将200HZ频率的低位加1 MOV
A,F2L CJNE
A,#F3L,RE CLR
TR1 76 ;///////////////////////////////////////////// RE: MOV
TH1,F2H MOV
TL1,F2L POP
ACC RETI AD:
MOV DPTR,#7F00H ;指向转换地址 MOV
A,#03H ;指向转换口 MOVX
@DPTR,A ;转换 MOV
ADTIME,#64H D6:
DJNZ ADTIME,D6 ;等100微秒转换完 MOVX
A,@DPTR ;转换后的值给A MOV
ADNUMBER,A ;转换的值给30H RET DELAY: MOV
R3,#0FFH D5:
DJNZ R3,D5 RET SETTAB: DB
0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H, 0FEH,0F6H DB
0EEH,3EH,9CH,7AH,9EH,8EH ;数显代码 END 77
|