中南大学单片机
单片机实验报告
学院:信息科学与工程学院
专业班级:
姓名:
指导老师:杨迎泽
实验一单片机I/O口应用实验_P3.3口输入P1口输出
一、实验目的
1、掌握单片机P3口、P1口简单使用。
2、学习延时程序的编写和使用。
二、实验内容
1、P3.3口做输入口,外接一脉冲,每输入一个脉冲,P1口按十六进制加一输出。
2、P1口做输出口,编写程序,使P1口接的8个发光二极管L0—L7按16进制加一的
方式点亮发光二极管。
三、实验说明
1、P1口是准双向口,它作为输出口时与一般的双向口使用方法相同,由准双向口结
构可知:当P1口作为输入口时,必须先对它置高电平,使内部MOS管截止,因
内部上拉电阻是20KΩ—40KΩ,故不会对外部输入产生影响。若不先对它置高,
且原来是低电平,则MOS管导通,读入的数据不正确。
2、延时子程序的延时计算。
对于延时的程序
DELAY:MOV R6,#00H
DELAY1:MOV R7,#80H
DJNZ R7,$
DJNZ R6,DELAY1
查指令表可知MOV、DJNZ指令均需用两个机器周期,而一个机器周期时间长度为12/ 6.0MHZ,所以该段指令执行时间为:
(((128+1)×256)+1)×2×(12÷6000000)=132.1ms。
四、实验原理图
图(1-1)
五、实验程序框图
六、 实验步骤
1、P3.3用插针连至K1,JU2(P1.0~P1.7)用8芯线连至JL (L0~L7)。
2、调试、运行程序test1中的MCUIO.ASM 。
3、开关K1每拨动一次,L0~L7发光二极管按16进制方式加一点亮。
七、 实验程序
#include
sbit P3_3=P3^3;
void time(void); main() {
P3.3真的为高吗?
P3.3为低吗?
开 始
P3.3为高吗? 延 时 延 时
A+1送P1口
循 环
N N N Y Y
Y
主程序: 图(1-2)
N
N
Y
R6设初值FFH
延时子程序: R7设初值FFH
R7-1=0否?
R6-1=0否?
返 回
Y
图(1-3)
B=0;
P1=0X00;
while (1)
{
while (1)
{
if (P3_3) continue;
time();
if (!P3_3) break;
}
while (1)
{
if (!P3_3) continue;
time();
if (P3_3) break;
}
B++;
ACC=B;
P1=ACC;
}
}
void time(void)
{
unsigned int i;
for (i=0;i<0xFFF;i++);
}
实验二单片机I/O口应用实验_工业顺序控制
一、实验目的
掌握工业顺序控制程序的简单编写和中断的使用。
二、实验预备知识
在工业控制中,像冲压、注塑、轻纺、制瓶等生产过程,都是一些断续生产过程,按某种程序有规律地完成预定的动作,对这类断续生产过程的控制称顺序控制,例:注塑机工艺过程大致按“合模→注射→延时→开模→产伸→产退”顺序动作,用单片机最易实现。
三、实验内容
8031的P1.0~P1.6控制注塑机的七道工序,现模拟控制七只发光二极管的点亮,高电平有效,设定每道工序时间转换为延时,P3.4为开工启动开关,低电平启动。P3.3为外故障输入模拟开关,P3.3为0时不断告警,P1.7为报警声音输出。
四、实验说明
实验中用外部中断0,编中断服务程序的关键是:
1、保护进入中断时的状态,并在退出中断之前恢复进入中断前的状态。
2、必须在中断程序中设定是否允许中断重入,即设置EX0位。
一般中断程序进入时应保护PSW 、ACC 以及中断程序中使用到的但并非其专用的寄存器,本实验中未涉及。 五、
实验接线图
图(2-1)
六、 实验程序框图
恢复现场
故障清除了吗?
返 回 报 警
保护现场
关输出
中断服务子程序:
Y
N
图(2-3)
主程序: 开始
· · · 中断、P1口、P3口初始化 P1口全低
工序2延时 工序1延时
等开工
工序7延时
· · · ·
图(2-2)
七、实验步骤
1、P3.4连K1,P3.3连K2,P1.0~P1.6分别连到L0~L6,P1.7连SIN(电子音响驱
动控制区),其卧式开关打在音乐上,短路片选择左边为蜂鸣器,下边为喇叭。
2、K1开关拨在上面,K2拨在上面。
3、调试、运行程序test2中的GYSX.ASM。
4、K1拨至下面(低电平),各道工序应正常运行。
5、K2拨至下面(低电平),应有声音报警(人为设置故障)。
6、K2拨至上面(高电平),即排除故障,程序应从刚才报警的那道工序继续执行。
八.实验程序
ORG 0000H
AJMP 0030H
ORG 0013H
LJMP HA2S3
ORG 0030H
HA2S: MOV P1,#0fFH
ORL P3,#00H
HA2S1: JB P3.4,HA2S1
ORL IE,#84H
ORL IP,#04H
MOV PSW,#00H
MOV SP,#53H
HA2S2: MOV P1,#081H
ACALL HA2S7
MOV P1,#082H
ACALL HA2S7
MOV P1,#084H
ACALL HA2S7
MOV P1,#088H
ACALL HA2S7
MOV P1,#090H
ACALL HA2S7
MOV P1,#0A0H
ACALL HA2S7
MOV P1,#0C0H
ACALL HA2S7
SJMP HA2S2
HA2S3: MOV B,R2
HA2S5: SETB P1.7
ACALL HA2S6
CLR P1.7
ACALL HA2S6
JNB P3.3,HA2S5
MOV R2,B
RETI
HA2S6: MOV R2,#06H
ACALL DELAY
RET
HA2S7: MOV R2,#30H
ACALL DELAY
RET
DELAY: PUSH 02H
DELAY1: PUSH 02H
DELAY2: PUSH 02H
DELAY3: DJNZ R2,DELAY3
POP 02H
DJNZ R2,DELAY2
POP 02H
DJNZ R2,DELAY1
POP 02H
DJNZ R2,DELAY
RET
END
实验五A/D 转换实验
一、实验目的
1、掌握A/ D转换与单片机的接口方法。
2、了解A/ D芯片0809转换性能及编程方法。
3、通过实验了解单片机如何进行数据采集。
二、实验内容
利用实验仪上的0809做A/ D转换实验,实验仪上的电位器提供模拟量输入。编制程序,将模拟量转换成数字量,通过显示接口芯片8279在七段数码管上显示。
三、实验说明
A/ D转换器大致分有三类:一是双积分A/ D转换器,优点是精度高,抗干扰性好,价格便宜,但速度慢;二是逐次逼近式A/ D转换器,精度、速度、价格适中;三是并行A/ D转换器,速度快,价格也昂贵。 实验用ADC0809属第二类,是8位A/ D转换器。
每采集一次一般需100μs 。由于ADC0809 A/D 转换器转换结束后会自动产生EOC 信号(高电平有效),取反后将其与8031的INT0相连,可以用中断方式读取A/ D 转换结果。
四、 实验接线图
显示部分原理图参考键盘显示控制器8279应用实验。
IN-026msb2-1
212-220IN-1272-3192-418IN-2282-582-615IN-312-714lsb2-8
17IN-4
2EO C
7IN-5
3AD D-A
25IN-64AD D-B 24AD D-C 23IN-7
5
AL E
22
ref(-)16EN AB LE 9STA R T 6ref(+)12
C L OC K 10
UB43
AD C 0809
1
2
3UB42A 74L S02
4
5
6
UB42B 74L S02
R D
W R
D0D1D2
GN D
D7D0
D1D2D3D4D5D6EO C
/EO C
5
6
U1C
74H C 04
R 08094.7K
VCC
VCC
IN0
Vou t
C L K_0809
500KHZ
C S_0809
Y0
图(5-1)
五、 实验程序框图
开 始
0809初始化 初始显示0809--00 0809通道0采样 数码管显示采样
图(5-2)
六、实验步骤
1、把0809的0通道IN0用插针线接至电位器模拟电压产生区V out插孔(0~5V)。
2、0809的时钟CLK_0809插孔与固定脉冲输出端500KHz相连。
3、0809的片选CS_0809连接至系统译码Y0。
4、将8279键盘接口显示部分的DU (a-h)用8芯线连接至数码管显示区的DU (a-h),
BIT (BIT0-BIT7)连接至数码管显示区的BIT(BIT0-BIT7);将8279CS连接到系统
译码Y6,8279CLK连接到固定脉冲的1MHZ。
5、调试、运行程序test5中AD0809.ASM,在数码管上显示当前采集的电压值转换
后的数字量,调节模拟电压的电位器,数码管显示将随着电压变化而相应变化,
典型值为:0V—00H,2.5V—80H,5V—FFH。
七、实验步骤
ORG 0000H
AJMP START
ORG 0030H ;?
START: LCALL FORMA T
MOV A,#00H
MOV DPTR,#8000H
MOVX @DPTR,A
LCALL DY1
MOVX A,@DPTR
LCALL CONVER
LCALL DISP8279
LCALL DELAY
AJMP START
FORMA T:
MOV 78H,#0H ; ;
MOV 79H,#8H ;
MOV 7AH,#0H ;
MOV 7BH,#9H ;
MOV 7CH,#12H ;-
MOV 7DH,#12H ;-
MOV 7EH,#0H ;0
MOV 7FH,#0H ;0
RET
CONVER:
MOV R0,A
ANL A,#0FH
MOV 7FH,A
MOV A,R0
SW AP A
ANL A,#0FH
MOV 7EH,A
RET
DISP8279: ;显示子程序,缓冲区为78H-7FH
C8279 EQU 0E001H ;)7fffH
D8279 EQU 0E000H ;7FFEH
MOV DPTR,#C8279
MOV A,#0H
MOVX @DPTR,A; 写8279方式字
MOV A,#2aH
MOVX @DPTR,A;写分频系数
MOV A,#0D0H
MOVX @DPTR,A;清显示
MOV A,#90H
MOVX @DPTR,A;设置从左边开始写入数据
DISP1: MOVX A,@DPTR
JB ACC.7,DISP1 ;读8279工作是否正常
MOV R0,#78H ;显示缓冲首址
MOV R1,#08H
DISP2: MOV A,@R0
MOV DPTR,#TAB
MOVC A,@A+DPTR ;查字型
MOV DPTR,#D8279
cpl a
MOVX @DPTR,A;送字型到8279显示
INC R0
DJNZ R1,DISP2
RET
;字型代码
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H ;0,1,2,3,4,5,6,7 DB 80H,90H,88H,83H,0C6H,0A1H,86H,08EH ;8,9,A,B,C,D,E,F
DB 08CH,0C1H,0BFH,91H,89H,0C7H,0FFH,07FH ; P(10),U(11),-(12),Y(13),H(14),L(15),关(16) ,.(17)
CLEAR8279:MOV DPTR,#C8279 ;清显示子程序
MOV A,#0D0H
MOVX @DPTR,A
RET
DY: PUSH 02H ;延时子程序
DELAY1: PUSH 02H
DELAY2: PUSH 02H
DELAY3: DJNZ R2,DELAY3
POP 02H
DJNZ R2,DELAY2
POP 02H
DJNZ R2,DELAY1
POP 02H
DJNZ R2,DY
RET
DY1:MOV R7,#0FFh
DJNZ R7,$
RET
DELAY:MOV R6,#0FFh
DELY2:MOV R7,#0FFh
DELY1:DJNZ R7,DELY1
DJNZ R6,DELY2
RET
END
实验十电子音响实验
一、实验目的
了解计算机发出不同音调声音的编程方法。
二、实验内容
用定时器产生不同频率的方法,组成的乐谱由单片机进行信息处理,经过放大后用8031的P1.0口输出音乐。
三、预备知识
1、要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半
周期的时间,利用计时器计时(此半周期时间),计时到后即反向输出,重复此过程即得到此频率的脉冲。
2、让定时器工作在计数方式,改变计数值TH0及TL0,以产生不同的频率。
3、每个音符使用一个字节,字节的高四位代表音符的高低,低四位代表音符的节拍。
4、低音1至高音1所对应的频率(Hz)依次是:131、147、16
5、175、19
6、220、24
7、
262、294、330、349、392、440、494、523。乘以二就提升该声音一个八度音阶,减半则降一个八度。
四、实验线路图
RD 321K
GC419012
RD 3115
GN D
VCC
RD 335.6K
SIN
A 1
B 2
FM Q
1
23J3_1
LB1+
LB1-RD 32'1K
VCC
SPE AKER
P1.0
图(10-1)
五、
实验步骤
1、把P1.0用插针连至SIN 插孔上(电子音响驱动区的短路片连到右边LB ,选喇叭,开关SWT1拔在音乐上,如果是DVCC-51JB 机型没有这个开关)。
2、调试、运行程序test10中的MUSIC.ASM 。 将播放“新年好”歌曲。
六、 实验程序
org 0000h Sjmp MAIN org 000bh mov tl0,r0 cpl p1.0 RETI
MAIN:MOV TMOD,#01H MOV IE,#82H MOV DPTR,#TAB LOOP: CLR A
MOVC A,@A+DPTR MOV R1,A INC DPTR
CLR A
MOVC A,@A+DPTR MOV R0,A ORL A,R1 JZ NEXT0 MOV A,R0 ANL A,R1
CJNE A,#0FFH,NEXT SJMP MAIN NEXT : MOV TH0,R1 MOV TL0,R0 SETB TR0
SJMP NEXT1
NEXT0:CLR TR0
NEXT1: CLR A
INC DPTR
MOVC A,@A+DPTR
MOV R2,A
LOOP1: ACALL D200C
DJNZ R2,LOOP1
INC DPTR
AJMP LOOP
D200C:MOV R3,#81H
D200B:MOV A,#0FFH
D200A:DEC A
JNZ D200A
DEC R3
CJNE R3,#00H,D200B
RET
TAB: DB 0FEH,25H,04H,0FEH,25H,02H ;11 1 5
DB 0FEH,25H,02H,0FDH,80H,04H
DB 0FEH,84H,02H,0FEH,84H,02H;33 3 1
DB 0FEH,84H,04H,0FEH,25H,04H
DB 0FEH,25H,02H,0FEH,84H,02H;13 5 5
DB 0FEH,0C0H,04H,0FEH,84H,02H
DB 0FEH,98H,02H,0FEH,84H,02H;43 2 -
DB 0FEH,57H,08H,00H,00H,04H
DB 0FFH,0FFH
END
;1=131 262 523 1047
;2=147 294 587 1175
;3=165 330 659 1319
;4=175 349 698 1397
;5=196 392 784 1568
;6=220 440 880 1760
;7=247 494 988 1976
1 收获体会
本次微控制器综合设计基本上使用了所选微控制器的所有资源,进一步熟悉和加深了对中断、定时器和串行通信的理解和使用。
我觉得软件实验就是让我们初学者熟悉keil的使用,然后复习下汇编的思想和掌握程序的流程,所以软件实验可以很快的完成,并且慢慢熟悉调试的强大功能。硬件设计中,仿真
让我很有感触,感觉蛮好玩的,可以摒弃麻烦的实验硬件自己在寝室玩而且不受硬件状态的限制,即便出错了也不会损坏。当然更重要的是这种好习惯,仿真完后再去在实验板上验证会比直接要来的确切而且便捷,至少不要老是去插拔线。而且再做一个程序前腰先用protus 把硬件都设计好采取做软件才对。在做实验中在同学指导下我试用C语言来编写程序,确实发现比汇编语言容易编写也容易理解,以前的实验还是有参考资料的习惯,现在什么都开始自己写感觉还是很有成就感的,当然这是基于程序本身就那么几行很容易编写,也不是说参考不好。总而言之,这学期的单片机实验还是收获颇丰的。相信在以后的实验学习实践工作中都会有个潜移默化的作用的。