| 超级好的51单片机编程例程!工程师必看! | ||
| 单片机简介与单片机的发展历史 |
I/O
口功能实例 |
|
| 定时器实例
(1秒报警,200hz输出 200-250变化输出) |
||
| 软件滤波十六进制六位数加法(数码显示) |
求六位和中的最大值和最小值(数码显示) |
|
| 求减去最大和最小值后的值(数码显示) |
除4所得软件滤波值(数码显示) |
|
| 软件模拟一个振 |
在显示频率输出的同时显示AD值(数码显示) |
|
| 过程检定(数码显示) |
||
| 按键数显,数码管显示加一 | ||
| PWM码简介及解码原理 |
||
| 智能定时的4位电子钟(带定时控制) |
智能红外工业控制器 |
|
|
51单片机学习网热心版主单片东东,收集整理的单片机教学课程(例子程序, 特别推荐!)转载请保留连接! 7.3
软件滤波 程序介绍(7.31—7.34):您如果接触过模电就知道, 的方法就是加电容滤波,这是用硬件实现的。实际上软件 法。在一次电压量的采集中,在很短的时间内对它进行6 输入中的最大值和最小值(7.32),然后减去最大值和最 就完成了一次软件滤波。省去了复杂的硬件,而且取得了 程序操作:程序写入上电运行后,用本实验仪自带 和值,7.32会继续显示最大和最小值,7.33程序会继续显 算法说明:为什么要选择取6个数进行计算呢?因为 最小值后,取平均值是除4.计算机的内部计算都是二进 了计算方便,我们选择取6个数,最后在算除法的时候, 27 7.31
十六进制六位数加法(数码显示) 程序实例(add6.asm): ORG
0000H MAIN: ADNUMBER
EQU 30H ;AD转换值 ADDNUMBER
EQU 31H ;加数值1 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 ;赋初值//////////////////////////////////////////// MOV
ADDHOLD,#00H MOV
ADDNUMBER,#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 ;////////////////////////////////////////////////// MAIN1: 28 ;显示AD值////////////////////////////////////////// ACALL
DELAY ACALL
DELAY ACALL
AD MAIN3: ACALL
CAIFEN ACALL
DISPLAY ;////////////////////////////////////////////////// ;加这次的AD值,并判是否加了六次,是的话就进入死循环 ACALL
DELAY ACALL
ADD1 ACALL
DISPLAY INC
ADDFLAG MOV
A,ADDFLAG CJNE
A,#06H,MAIN2 LOOP:
AJMP LOOP ;////////////////////////////////////////////////// ;没有加到六次,继续取值加,如果没有来新AD值,还是去 显示上次加的值,有新AD值来了,显示这次AD值,并加上上 次AD值,显示/////////////////////////////////////// MAIN2:
ACALL DELAY ACALL
AD MOV
A,ADNUMBER CJN
A,ADDTOTAL,MAIN3 AJM
MAIN2 ;////////////////////////////////////////////////// ;////////////////////////////////////////////AD转换 AD: 29 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 ;////////////////////////////////////////////////// ;拆分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 30 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 MOV
A,ADDJW MOV
DPTR,#SETTAB MOVC
A,@A+DPTR MOV
SBUF,A D5:
JNB TI,D5 CLR
TI MOV
SBUF,#00H 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 31 ADDJW1:
ANL A,#0FH MOV
DISL,A ;加值取低位 MOV
A,ADDHOLD ANL
A,#0F0H SWAP
A MOV
DISH,A ;加值取高位 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 |