| 超级好的51单片机编程例程!工程师必看! | ||
| 单片机简介与单片机的发展历史 |
I/O
口功能实例 |
|
| 定时器实例
(1秒报警,200hz输出 200-250变化输出) |
||
| 软件滤波十六进制六位数加法(数码显示) |
求六位和中的最大值和最小值(数码显示) |
|
| 求减去最大和最小值后的值(数码显示) |
除4所得软件滤波值(数码显示) |
|
| 软件模拟一个振 |
在显示频率输出的同时显示AD值(数码显示) |
|
| 过程检定(数码显示) |
||
| 按键数显,数码管显示加一 | ||
| PWM码简介及解码原理 |
||
| 智能定时的4位电子钟(带定时控制) |
智能红外工业控制器 |
|
|
51单片机学习网热心版主单片东东,收集整理的单片机教学课程(例子程序, 特别推荐!)转载请保留连接! 7.33
求减去最大和最小值后的值(数码显示) 程序实例(add62.asm) ORG
0000H MAIN: ADNUMBER
EQU 30H ;AD转换值 ADL
EQU 32H ;// ADH
EQU 33H ;ADL转换高低位值 DISL
EQU 34H ;// DISH
EQU 35H ;显示高低位值 ADDTOTAL
EQU 36H ;第一次AD转换值 ADDJW
EQU 37H ;加法进位数 ADDHOLD
EQU 38H ADDFLAG
EQU 39H ;加标志 ENDFLAG
EQU 40H ADH1
EQU 41H ;AD中最大的值 40 ADL1
EQU 42H ;AD中最小的值 ADHOLDH
EQU 43H ADHOLDL
EQU 44H ;求AD最大值与最小 值时AD的比较值,即以此两个值为比较中转 FOUR
EQU 45H SUB
EQU 46H ;减去高低位后的值 JWHOLD
EQU 47H ;保存进位值 ;赋初值/////////////////////////////////////////// MOV
ADDHOLD,#00H MOV
ADL,#00H MOV
ADH,#00H MOV
DISL,#00H MOV
DISH,#00H MOV
ADDJW,#00H MOV
ADDFLAG,#00H MOV
ENDFLAG,#00H MOV
ADDTOTAL,#00H MOV
ADH1,#00H MOV
ADL1,#00H MOV
ADHOLDH,#00H MOV
FOUR,#00H MOV
ADHOLDL,#00H MOV
JWHOLD,#00H MOV
SUB,#00H ;////////////////////////////////////////////////// MAIN1: ACALL
DELAY ACALL
DELAY 41 ACALL
AD ;取AD值 MAIN3:
ACALL CAIFEN ACALL
DISPLAY ;显示 ACALL
DELAY ACALL
DELAY ;算最大值和最小值////////////////////////////////// ACALL
ADDH ACALL
ADDL ;////////////////////////////////////////////////// ;加和值显示/////////////////////////////////////// ACALL
ADD1 ACALL
DISPLAY ;///////////////////////////////////////////////// ;判是否加到了6次////////////////////////////////// INC
ADDFLAG MOV
A,ADDFLAG CJNE
A,#06H,MAIN2 ;////////////////////////////////////////////////// ACALL
DELAY ACALL
DELAY ACALL
DELAY ACALL
DELAY ACALL
DELAY ACALL
DELAY ACALL
CAIFEN1 ;拆最小值 ACALL
CAIFEN2 ;拆最大值 ACALL
DISPLAY ;显示最大值最小值 ACALL
DELAY 42 ACALL
DELAY ACALL
JIAN1 ;呼叫减最大值最小 值程序 ACALL
CAIFEN3 ;拆分 ACALL
DISPLAY ;显示减去最大值最 小值后的值 ACALL
DELAY ACALL
DELAY ACALL
DELAY LOOP:
AJMP LOOP ;判有没有来新AD值,没有显示以前,有显示现在的/// MAIN2: ACALL
DELAY ACALL
AD MOV
A,ADNUMBER CJNE
A,ADDTOTAL,MAIN3 AJMP
MAIN2 ;///////////////////////////////////////////////// ;AD转换/////////////////////////////////////////// AD: MOV
DPTR,#7F00H ;指向转换地址 MOV
A,#03H ;指向转换口 MOVX
@DPTR,A ;转换 MOV
R1,#64H D1:
DJNZ R1,D1 ;等100微秒转换完 MOVX
A,@DPTR ;转换后的值给A MOV
ADNUMBER,A ;转换的值给30H RET 43 ;////////////////////////////////////////////////// ;拆分AD值程序////////////////////////////////////// CAIFEN: MOV
A,ADNUMBER ANL
A,#0FH MOV
ADL,A ;取低位 MOV
A,ADNUMBER ANL
A,#0F0H SWAP
A MOV
ADH,A ;取高位 MOV
DISL,ADL MOV
DISH,ADH ;给显示值 RET ;////////////////////////////////////////////////// ;显示////////////////////////////////////////////// DISPLAY: 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 44 MOV
A,ADDJW MOV
DPTR,#SETTAB MOVC
A,@A+DPTR MOV
SBUF,A D5:
JNB TI,D5 CLR
TI MOV
A,FOUR MOV
DPTR,#SETTAB MOVC
A,@A+DPTR MOV
SBUF,A D6:
JNB TI,D6 CLR
TI RET ;///////////////////////////////////////////// ;加法程序///////////////////////////////////// ADD1: CLR
C MOV
ADDTOTAL,ADNUMBER MOV
A,ADNUMBER ADDC
A,ADDHOLD MOV
ADDHOLD,A JNC
ADDJW1 INC
ADDJW ADDJW1: ANL
A,#0FH MOV
DISL,A ;加值取低位 MOV
A,ADDHOLD ANL
A,#0F0H 45 SWAP
A MOV
DISH,A ;加值取高位 RET ;///////////////////////////////////////////////// ;AD值中的最大值/////////////////////////////////// ADDH: MOV
A,ADH1 CJNE
A,#00H,ADDH1 MOV
ADH1,ADNUMBER AJMP
RE ADDH1:
MOV A,ADNUMBER CLR
C SUBB
A,ADH1 JC
RE MOV
ADH1,ADNUMBER RE:
RET ;////////////////////////////////////////////////// ;AD值中的最小值//////////////////////////////////// ADDL: MOV
A,ADL1 CJNE
A,#00H,ADDL1 MOV
ADL1,ADNUMBER AJMP
RE1 ADDL1:
MOV A,ADNUMBER CLR
C SUBB
A,ADL1 JNC
RE1 MOV
ADL1,ADNUMBER 46 RE1:
RET ;////////////////////////////////////////////////// ;分解AD最小值的个,十位//////////////////////////// CAIFEN1: MOV
A,ADL1 ANL
A,#0FH MOV
ADL,A ;取低位 MOV
A,ADL1 ANL
A,#0F0H SWAP
A MOV
ADH,A ;取高位 MOV
DISL,ADL MOV
DISH,ADH ;给显示值 RET ;///////////////////////////////////////////////// ;分解AD最大值的个,十位/////////////////////////// CAIFEN2: MOV
A,ADH1 ANL
A,#0FH MOV
ADL,A ;取低位 MOV
A,ADH1 ANL
A,#0F0H SWAP
A MOV
ADH,A ;取高位 MOV
JWHOLD,ADDJW MOV
ADDJW,ADL MOV
FOUR,ADH ;给显示值 RET 47 ;////////////////////////////////////////////////// ;分解减去最高位和最低位的数//////////////////////// CAIFEN3: MOV
A,SUB ANL
A,#0FH MOV
ADL,A MOV
A,SUB ANL
A,#0F0H SWAP
A MOV
ADH,A MOV
DISL,ADL MOV
DISH,ADH RET ;////////////////////////////////////////////////// ;减去最高位和最低位//////////////////////////////// JIAN1: MOV
FOUR,#00H MOV
ADDJW,JWHOLD MOV
A,ADDHOLD ;取和值 CLR
C SUBB
A,ADH1 ;减最高位 JNC
JIAN2 DEC
ADDJW ;有进位,高位减一 JIAN2: CLR
C SUBB
A,ADL1 ;减低位 JNC
TUI ;无进位出去,有进 位高位减一 48 DEC
ADDJW TUI:
MOV SUB,A ;取减的值给SUB RET ;////////////////////////////////////////////////// ;滤波////////////////////////////////////////////// DELAY:
;延时 MOV
R3,#0AH DD1:
MOV R1,#0FFH D2
: MOV R2,#0FFH DJNZ
R2,$ DJNZ
R1,D2 DJNZ
R3,DD1 RET ;////////////////////////////////////////////////// SETTAB: DB
0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H, 0FEH,0F6H DB
0EEH,3EH,9CH,7AH,9EH,8EH END |