| 超级好的51单片机编程例程!工程师必看! | ||
| 单片机简介与单片机的发展历史 |
I/O
口功能实例 |
|
| 定时器实例
(1秒报警,200hz输出 200-250变化输出) |
||
| 软件滤波十六进制六位数加法(数码显示) |
求六位和中的最大值和最小值(数码显示) |
|
| 求减去最大和最小值后的值(数码显示) |
除4所得软件滤波值(数码显示) |
|
| 软件模拟一个振 |
在显示频率输出的同时显示AD值(数码显示) |
|
| 过程检定(数码显示) |
||
| 按键数显,数码管显示加一 | ||
| PWM码简介及解码原理 |
||
| 智能定时的4位电子钟(带定时控制) |
智能红外工业控制器 |
|
|
51单片机学习网热心版主单片东东,收集整理的单片机教学课程(例子程序, 特别推荐!)转载请保留连接! 7.4过程检定 程序介绍(7.41—7.43):本程序用软件模拟了一个振 给传感器一定频率的电压,在感应端感应一定频率的电压 压值,不同油品粘度也可以感应不同电压值,等等。但是 于是这就要给激励端变化的频率来测感应端的电压,感应 是所搜到的谐振频率。以前没有单片机软件控制时,我们 端电压,来搜到谐振频率。7.41是在p1.0口输出并显示变 上增加了AD输入量的显示。 7.43将会在您输入变化AD值后,将搜到的AD值与 程序操作:因为7.41和7.42只是7.43的铺垫。所以在 200-250HZ变化频率的显示(省略2),右边看到输入AD 值上升,下降。在变化频率显示完后,程序将会把您所输 软件模拟的全过程。 7.41
P1.0口产生200——250HZ变化频率输出(数 码显示) 程序实例(f25dis.asm): ORG
0000H AJMP
MAIN ORG
001BH AJMP
DIN1 MAIN: ;定义频率200和300////////////////////////////////// F2H
EQU 30H 60 F2L
EQU 31H F3H
EQU 32H F3L
EQU 33H ;///////////////////////////////////////////////// DISFLAG
EQU 34H ;显示标志 DISL
EQU 35H ;显示低位 DISH
EQU 36H ;显示高位 ;定义频率保持初值////////////////////////////////// MOV
R1,#50 MOV
R2,#02H ;////////////////////////////////////////////////// ;显示赋初值//////////////////////////////////////// MOV
DISFLAG,#00H MOV
DISL,#00H MOV
DISH,#00H ;////////////////////////////////////////////////// ;频率赋初值//////////////////////////////////////// MOV
F2H,#0F6H MOV
F2L,#3BH MOV
F3H,#0F8H MOV
F3L,#2FH ;///////////////////////////////////////////////// CLR
P1.0 ;在P1.0口产生一个低电 平,一个脉冲是由一个高电平和一个低电平组成的 MOV
TMOD,#00010000B;定时器工作于方式1 MOV
TH1,F2H MOV
TL1,F2L ;200HZ输出 SETB
EA ;开总中断 61 SETB
TR1 ;开定时器1运行 SETB
ET1 ;开定时器1允许 DISPLAY: MOV
SBUF,#00H D1:
JNB TI,D1 CLR
TI MOV
SBUF,#00H 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 AJMP
DISPLAY LOOP:
AJMP LOOP DIN1: CPL
P1.0 ;取反P1.0口,实际是为了不断 的将p1.0的电平关系转换,即产生了频率 ;频率保持时间////////////////////////////////////// 62 DJNZ
R1,RE MOV
R1,#50 DJNZ
R2,RE MOV
R2,#02H ;////////////////////////////////////////////////// INC
DISFLAG 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的低 63 位值了吗,没到出去,到了关定时器/////////////////// JIA: INC
F2L ;到了将200HZ频率的低位加1 MOV
A,F2L CJNE
A,#F3L,RE CLR
TR1 ;////////////////////////////////////////////////// RE: MOV
TH1,F2H MOV
TL1,F2L RETI 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 7.42
在显示频率输出的同时显示AD值(数码显示) 程序实例(ad25dis.asm): ORG
0000H AJMP
MAIN ORG
001BH AJMP
DIN1 MAIN: 64 ;定义频率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高位 ;定义频率保持初值////////////////////////////////// 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 65 MOV
F2L,#3BH MOV
F3H,#0F8H 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 66 MOV
DPTR,#SETTAB MOVC
A,@A+DPTR MOV
SBUF,A D1:
JNB TI,D1 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 AJMP
ADDIS LOOP:
AJMP LOOP DIN1: PUSH
ACC 67 CPL
P1.0 ;取反P1.0口,实际是为了 不断的将p1.0的电平关系转换,即产生了频率 ;频率保持时间////////////////////////////////////// DJNZ
R1,RE MOV
R1,#100 DJNZ
R2,RE MOV
R2,#02H ;////////////////////////////////////////////////// INC
DISFLAG 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 68 CJNE
A,F3H,RE ;////////////////////////////////////////////////// ;频率高位加到300HZ的高位值了,低位加一,到300HZ的低 位值了吗,没到出去,到了关定时器/////////////////// JIA: INC
F2L ;到了将200HZ频率的低位 加1 MOV
A,F2L CJNE
A,#F3L,RE CLR
TR1 ;////////////////////////////////////////////////// RE: MOV
TH1,F2H MOV
TL1,F2L POP
ACC RETI AD:
MOV DPTR,#7F00H ;指向转换地址 MOV
A,#03H ;指向转换口 MOVX
@DPTR,A ;转换 MOV
40H,#64H D6:
DJNZ 40H,D6 ;等100微秒转换完 MOVX
A,@DPTR ;转换后的值给A MOV
ADNUMBER,A ;转换的值给30H RET DELAY: MOV
R3,#0FFH D5:
DJNZ R3,D5 RET 69 SETTAB: DB
0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H, 0FEH,0F6H DB
0EEH,3EH,9CH,7AH,9EH,8EH ;数显代码 END
|