| |
|
| 微控制器技术
专业班级: | |
| |
|
微控制器技术实验报告
目录
一、实验目的及要求 ………………………………………………………·1 二、实验基本内容 …………………………………………………………·1 三、实验设备 ………………………………………………………………·5 四、实验设计思想和结果分析………………………………………………·8 4.1清零程序与拆字程序设计 …………………………………………·8 4.2拼字程序与数据传送程
序 …………………………………………·10
4.3排序程序与散转程序………………………………………………·12 4.4数字量输入输出实验………………………………………………·14 4.5定时器/计数器实验 ………………………………………………·16 4.6A/D、D/A转换实验 ……………………………………………… ·22 4.7串行通讯实
验 ………………………………………………………·31
五、结束语 …………………………………………………………………·40
2
微控制器技术实验报告
一、 | 实验目的及要求: |
1、学习KeilC51 集成开发工具的操作及调试程序的方法,包括:仿真调试
与脱机运行间的切换方法;
2、熟练使用SSTC554RC单片机核心板及I/O扩展实验系统;
3、熟练掌握在KeilC51 与Proteus仿真软件虚拟联机环境下,基于51单
片机控制器数字接口电路的硬件、软件设计与功能调试;
4、完成MCS51单片机指令系统软件编程设计和硬件接口功能设计题;
二、实验基本内容(TD-51单片机实验系统实现)
实验一清零程序与拆字程序设计
根据实验指导书之“第二章单片机原理实验”(P17~P23页)内容,熟悉实验环境及方法,完成思考题1、2(P23)基础实验项目。
实验二拼字程序与数据传送程序设计
汇编语言完成实验指导书P24思考题3、4题的基础实验项目。
实验三排序程序与散转程序设计
汇编语言完成实验指导书P24思考题5、6题的基础实验项目。
实验四数字量输入输出实验
基本部分:阅读、验证C语言程序功能。使用汇编语言编程,完成实验指导书之“3.1数字量输入输出实验”基本实验项目(P36),。
提高部分:(任选一题)
题目一:LED交通灯控制(使用8255接口芯片)
要求:使用汇编语言编程,功能为:通过开关实现LED灯工作方式即时 控制,完成LED交通灯的开关控制显示功能和LED交通灯自动循 环显示功能。
题目二:LED灯控制(使用8255接口芯片)
要求:使用汇编语言编程,功能为:通过KK1实现LED灯工作方式即时 控制,完成LED开关控制显示和LED灯左循环、右循环、间隔闪 烁功能。
题目三:键盘扫描与数码管显示设计
要求:阅读、验证P69上的C语言参考程序功能。用汇编语言完成编程
3
微控制器技术实验报告
与功能调试。
实验五定时器/计数器实验
基本部分:阅读、验证C语言程序功能。使用汇编语言编程,完成实验指 导书之“3.3定时/计数器实验”基本实验项目(P40)。
提高部分:(任选一题完成)
题目一:定时器控制LED灯
要求:由单片机内部定时器1,按方式1工作,即作为16位定 时器使用每0.05秒钟T1溢出中断一次。P1口的P1.0-P1.7分别接 八个发光二极管。编写程序模拟时序控制装置。开机后第一秒钟L1, L3亮,第二秒钟L2,L4亮,第三秒钟L5,L7亮,第四秒钟L6,L8 亮,第五秒钟L1,L3,L5,L7亮,第六秒钟L2,L4,L6,L8亮, 第七秒钟八个LED灯全亮,第八秒钟全灭,以后又从头开始,L1,L3 亮,然后L2,L4亮……一直循环下去。
题目二:计数器实验
要求:单片机内部定时计数器,按计数器模式和方式1工作,对 P3.4(T0)引脚进行计数。使用T1作定时器,50ms中断一次,看T0 内每0.50来了多少脉冲,将其数值按二进制在LED灯上显示出来, 5秒后再次测试。
题目三:急救车与交通灯(外部中断实验)
要求:完成交通灯基本功能基础上,当有急救车到达时,两向交通信号为全红,以便让急救车通过。假定急救车通过路口时间为10秒,急救车通过后,交通灯恢复中断前状态。本实验题以按键为中断申请,表示有急救车通过。
实验六A/D、D/A转换实验
基本部分:阅读、验证C语言程序功能。使用汇编语言编程,完成实验指 导书之“4.3A/D 转换实验”项目(P)和“4.4D/A 转换 实验”项目(P67)。
提高部分:(要求:Proteus环境下完成)
小键盘给定(并显示工作状态),选择信号源输出波形类型(D/A转换方式),经过A/D采样后,将采样数据用LED灯,显示当前模拟信号值大小及变化状态。
实验七串行通讯实验
基本部分:阅读、调试C语言程序功能。使用汇编语言编程,完成实验 指导书之“3.7串口通讯实验”项目。(要求:实验仪器上完 成)
提高部分:(要求:Proteus环境下完成)
题目一:利用单片机实验系统,实现与PC机通讯。功能要求:将从 实验系统键盘上键入的数字,字母显示到PC机显示器上, 将PC机键盘输入的字符(0-F)显示到单片机实验系统的数 码管上。
题目二:进行实验六、实验七实验内容综合。
4
微控制器技术实验报告
三、实验设备
软件设备:KEILuv2,PROTEUS7.4
硬件设备:PC机,TD-51系统板(包括SSTE554RC单片机一片、串行通信
线、接口等)
1、TD-51系统板
系统构成
TD-51系统板为开放的最小单片机系统,采用具有在系统可编程和在应用可
编程技术的增强型51单片机,单片机内置仿真程序,可以实现调试、仿真功能,
配合TD系列微机接口教学实验平台可开展单片机原理及应用的实验教学。
系统功能特点
1.取代硬件仿真器的增强型单型
系统采用具有在系统可编程(ISP)和在应用可编程(IAP)技术的增强型
51单片机,单片机内置仿真程序,完全取代传统的硬件仿真器和编程器。这
种先进的单片机将仿真系统和应用系统合二为一,大大降低了应用开发成本,
极大地提高了研发效率。把单片机的仿真开发和应用设计提高到一个崭新的
技术领域。
2.先进的集成开发调试调
使用业界著名的KeilC51 集成开发环境作为实验设计、调试的工具。Keil
C51提供了强大的调试功能,可单步、断点、全速运行程序,可观察寄存器
区、ROM变量区、RAM变量区等的内容。支持汇编语言和C语言的源语言调
试。
3.灵活的组合组
采用开放的系统板结构,可以灵活地配合各型号接口实验平台开展单片机
的应用教学。
5
微控制器技术实验报告
4.丰富的实验内容
提供了丰富的原理及接口应用实验。配合接口实验平台可完成数字量输入 /输出、中断、定时器/计数器、看门狗、低功耗、PCA、串口通讯、静态存储 器、FLASH、A/D、D/A、键盘及数码显示、电子音响、点阵LED、LCD、步进电 机、直流电机、温度控制等实验内容。
2、SSTE554RC简介
TD-51系统板上提供了一片SSTE554RC,该器件是SST公司推出的8位微控
制器FlashFlex51家族中的一员,具有如下特征:
·\u19982X8051兼容,嵌入SuperFlash存储器
-软件完全兼容
-开发工具兼容
-引脚全兼容
·\u24037X作电压5V,工作时钟0~40MHz
·1Kbyte内部RAM
·\u20004X块SuperFlashEEPROM,
主块32Kbyte,从块8Kbyte,扇区为128Byte ·\u26377X三个高电流驱动端口(每个16mA)
·\u19977X个16位的定时器/计数器
·\u20840X双工、增强型UART
-帧错误检测
-自动地址识别
·\u20843X个中断源,四级优先级
·\u21487X编程看门狗定时器(WDT)
·\u21487X编程计数阵列(PCA)
·\u21452XDPTR寄存器
·\u20302XEMI模式(可禁止ALE)
·SPI串行接口
·\u26631X准每周期12个时钟,器件提供选项可使速度倍增,达到每周期6个时钟
·\u20302X功耗模式
-掉电模式,可由外部中断唤醒
-空闲模式
SSTE554RC的功能框图如图1-2-1所示,外部引脚如图1-2-2所示。SSTE554RC的特殊功能寄存器如表1-2-1所列。
6
微控制器技术实验报告
7
微控制器技术实验报告
四、实验设计思想与结果分析
实验一到实验四为软件编程实验,需要熟练掌握KEILuv2编程工具的使用,通过编写程序实现实验要求。实验四到实验八为硬件接口实验,需要利用TD-51系统板,通过KEILuv2编写好程序,下载到所给的SSTE554RC单片机中,按原理接好硬件接线图,完成实验要求。
4.1实验一清零程序与拆字程序设计
实验调试步骤及结果分析:
(1)编写好实验程序后,采用ISP模式调试。
(2)运行程序,使用Keil51模拟器中的虚拟存储器监视内容变化。(访问片外存储器,用“X:+地址”的格式)。
(3)在清零实验中。用单步跳过的调试方式。7000H-7FFFH中内容先被写入0FFH;然后全部清零。
(4)在拆子程序实验中,单步进入调试,先在7000H中,写入1FH,首先送低位0FH至7001H,然后送高位1H至7002H。
程序流程图:
微控制器技术实验报告
清零程序流程图 拆字程序流程图
程序清单:
清零程序:
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV A, #00H
MOV DPTR,#7000H ;赋给首地址
MOV R1,#100H ;循环次数,完成对7000H-70FFH的置一 MOV R2, #10H
LOOP1:MOVX @DPTR,A
INC DPTR
DJNZ R1,LOOP1
DJNZ R2,LOOP1 ; 因为都是先减一之后再做比较,
所以0FFH、0FH 个数要100H、10H次
SJMP $
END
拆字程序:
ORG 0000H
LJMP MAIN
ORG 1000H
MAIN: MOV DPTR,#7000H
MOVX A,@DPTR ;赋值
MOV R0,A
ANL A,#0F0H ;得到高四位
SWAPA
INC DPTR
MOVX @DPTR,A ;高位给7001H
MOV A,R0
ANL A,#0FH ;得到低四位
INC DPTR
MOVX @DPTR,A ;低位给7002H
SJMP $
END
9
微控制器技术实验报告
4.2实验二拼字程序与数据传送程序设计
实验步骤及结果分析:
(1)编写好实验程序后,采用ISP模式调试。
(2)拼字程序里,将两个字节内容分别存为12H,34H。低位相拼,结果是24H。
(3)运行程序,使用Keil51模拟器中的虚拟存储器监视内容变化。(访问片外存储器,用“X:+地址”的格式)。
程序流程图:
拼字程序流程图 数据传输程序流程图
程序清单:
拼字程序
ORG 0000H
LJMP MAIN3
10
微控制器技术实验报告
ORG 1000H
MAIN3:MOV DPTR,#7000H
MOVXA,@DPTR ;原值给A
ANL A,#0FH ;取低四位
SWAP A ;将原低四位移到高四位 MOV B,A
INCDPTR
MOVXA,@DPTR ;再取7001H的值
ANL A,#0FH ;取低四位
ADDA,B
INCDPTR
MOVX @DPTR,A ;获得结果
SJMP$
END
数据传输程序
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV R2,#10H ;源RAM区的第一个地址
MOV R3,#19H ;源RAM区的第二个地址 MOV R4,#22H ;目的RAM区的第一个地址 MOV R5,#2BH ;目的RAM区的第二个地址 MOV R6,#02H ;第一次传输的字节数据个数 MOV R7,#03H ;第二次传输的字节数据个数L1: MOV B,R2
MOV R0,B
MOV A,@R0
MOV B,R4
MOV R1,B
MOV @R1,A
INC R2
INC R4
DJNZ R6,L1 ;完成第一路的数据传输L2: MOV B,R3
MOV R0,B
MOV A,@R0
MOV B,R5
MOV R1,B
MOV @R1,A
INC R3
INC R5
DJNZ R7,L2 ;完成整个的数据传输
SJMP $
11
微控制器技术实验报告
END
结果分析:在拼字程序中,用了SWAP A,方便实现了数据高四位与低四位的交换。数据传送实验中,其重点是对地址变化的把握。将初始地址与及传送地址都用加1指令实现地址变化。
4.3实验三排序程序与散转程序设计
实验步骤及结果分析:
排序实验:
(1)编写实验程序,编译、链接无误后联机调试;
(2)为30H~39H赋初值,如:在命令行中键入ECHAR D:30H=9,11H, 5, 31H, 20H, 16H,1, 1AH, 3FH, 8 后回车,可将这10个数写入30H~39H中; (3)将光标移到语句行命令,将程序运行到该行;
(4)查看存储器窗口中30H~39H中的内容,验证程序功能;
(5)重新为30H~39H单元赋值,反复运行实验程序,验证程序的正确性。
实验流程图 |
|
程序清单:
散转程序:
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:MOVA,#01H
12
微控制器技术实验报告
MOV R2,A
RL A
ADD A,R2
MOV DPTR,#PTAB
JMP @A+DPTR
PTAB: LJMP PM0
LJMP PM1
LJMP PM2
LJMP PM3
PM0: [程序体0]
PM1: [程序体1]
PM2: [程序体2]
PM3: [程序体3]
SJMP $
END
冒泡排序子程序:
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV R0,#10H ;初始地址
MOV R7,#04H ;外循环次数(参与比较的数的个数-1) ACALL MAOP
SJMP $
MAOP:
L1: MOV A,R0 ;赋给初始地址
MOV R1,A
INC R1 ;取第二个数的地址
MOV A,R7
MOVR6,A
L2: MOV A,@R0
CLR C
SUBB A,@R1 ;两数进行比较
JC L3 ;前数小于后数则保持位置不变
MOV A,@R0 ;否则,交换位置
XCH A,@R1
MOV @R0,A
L3: INC R1
DJNZ R6,L2 ;内循环是否完成
INC R0
DJNZ R7,L1 ;外循环是否完成
RET ;返回主程序
END
13
微控制器技术实验报告
4.4实验四 数字量输入输出实验
实验步骤:(1)按图11接好试验线路图,图中圆圈表示不要通过排线连接
(2)编写实验程序,编译链接无误后进入调试状态
(3)运行实验程序,观察实验现象,验证程序正确性
(4)按复位键,结束程序运行,退出调试状态
实验硬件接线图:
程序清单:
基础部分:
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN : MOV P1,#0FFH ;初始化
MOV A,P1 ;将输入写进累加器A
SWAP A
ANL A,#0FH
MOV P1,A ;输出显示
LJMP MAIN ;循环不断检测P1口输入端的新状态 SJMP $
END
LED灯控制:
ORG0000H
LJMPMAIN
ORG0100H
MAIN: MOV TMOD, #60H ;设置T1为模式2,外部计数方式 MOV TH1,#0FFH ;T1 计数器赋初值
14
微控制器技术实验报告
MOVTL1,#0FFH
MOV DPTR,#7300H
MOV A,#80H
MOVX @DPTR,A
MOV DPTR,#7100H
SETB TR1 ;开启计数器
LEFT: MOV R0,#08H ;左循环
MOV A,#01H
A1: MOVX @DPTR,A
LCALL DELAY
RL A
DJNZ R0,A1
JBC TF1,RIGHT ;查询T1溢出标志,TF1=1时转移 JMP LEFT
RIGHT:MOV R0,#08H ;右循环
MOV A,#80H
A2: MOVX @DPTR,A
LCALL DELAY
RR A
DJNZ R0,A2
JBC TF1,SHANSHUO ;查询T1溢出标志,TF1=1时转移 JMP RIGHT
SS: MOV R0,#08H ;闪烁
LP1: MOV A,#55H
MOVX @DPTR,A
LCALL DELAY
MOV A,#0AAH
MOVX @DPTR,A
LCALL DELAY
DJNZ R0,LP1
JBC TF1, LEFT ;查询T1溢出标志,TF1=1时转移 JMP SHANSHUO
DELAY: MOV R1,#0FFH
DEL1: MOV R2,0FFH
DEL2: DJNZ R2, DEL2
DJNZ R1,DEL1
RET
SJMP $
END
15
微控制器技术实验报告
结果分析:
基本数字量输入输出实验其重点在于对单片机的准双向口的理解。即在用作输入时,口锁存器必须先写入“1”。而作为输出时则可直接使用。
利用计数器T1外部技术方式,当外部输入脉冲引脚上出现电平负跳变时,T1计数器加一,溢出标志TF1置一,然后改变LED灯亮的方式,同时,将标志位TF1复位,进入下一轮的计数溢出等待。因此,而形成三种亮灯方式的自动循环。若是用开关实现三种方式的亮灯,则需要在最开始和每种亮灯之后通过8255对开关状态进行采集并进行判断。因此事先还要先设置好哪个开关的闭合表示哪种亮灯方式。
4.5实验五定时器/计数器实验
实验步骤:
(1)编写实验程序,编译、链接后联机调试;
(2)运行实验程序,使用示波器观察P1.0引脚上的波形并记录周期;(3)改变计数初值,观察实验现象,验证程序功能。
实验硬件接线图:
16
微控制器技术实验报告
<1>定时器LED控制PROTEUS仿真接线图
程序流程图:
程序清单:
17
微控制器技术实验报告
定时器程序(汇编版)
ORG0000H
LJMPMAIN
ORG001BH
LJMPINTT1
ORG0030H
MAIN:
MOV SP,#60H ;设置堆栈
MOV TH1,#3CH ;T1定时器初始化
MOV TL1,#0B0H ;50ms
MOV TMOD,#10H ;T1工作在方式一
SETB TR1 ;开始计时
SETB ET1 ;开定时器中断
SETB EA ;开总中断
MOV DPTR,#TABLE ;数据段指向存储点亮顺序的数据表 MOV R1,#00H ;指针清零,指向第一个元素
MOV R0,#20 ;设置循环次数
LED:
MOV A,R1
MOVC A,@A+DPTR ;依次读取TABLE里的值
MOV P1,A ;赋给P1口点亮LED
AJMP LED ;循环执行等待
INTT1: ;T1定时器中断服务程序
PUSH ACC ;入栈保护,保护累加器
PUSH PSW ;保护状态寄存器的值
MOV TH1,#3CH ;重新初始化T1
MOV TL1,#0B0H ;50ms
DJNZ R0,RETT1 ;循环次数到(用于实现1s定时)中断返回
18
微控制器技术实验报告
MOV R0,#20 ;重新设置R0=20
INC R1 ;指针自增
MOV A,R1
ANL A,#07H ;判断指针是否到8,若是则清零,达到循环 的作用
MOV R1,A
RETT1:POPPSW
POP ACC
RETI
TABLE:DB0FAH,0F5H,0AFH,5FH,0AAH,55H,00H,0FFH
END
定时器程序(C语言版)
#include<reg51.h> //包含头文件,一般情况不需要改动,头文件包 含特殊功能寄存器的定义
sbitLED1=P1^0; // 定义LED端口
voidInit_Timer1(void)
{
TMOD |= 0x10; //使用模式1,16位定时器,使用"|"符号可以在使 用多个定时器时不受影响
TH1=0x3C; //给定初值,这里使用定时器最大值从0开始计数一 直到65535溢出
TL1=0xB0;
EA=1; //总中断打开
ET1=1; //定时器中断打开
TR1=1; //定时器开关打开
}
19
微控制器技术实验报告
/*------------------------------------------------ 主程序
------------------------------------------------*/unsigned char a=10,b=8;
main()
{
Init_Timer1(); //初始化
while(1);
}
/*------------------------------------------------ 定时器中断子程序
------------------------------------------------*/void Timer1_isr(void) interrupt 3 using 1
{
TH1=0x00;
//重新赋值TL1=0x00;
a--;
if(a==0)
{
a=10;
if(b==8)
{
P1=~0xa0;
}
if(b==7)
{
P1=~0x50;
}
if(b==6)
20
微控制器技术实验报告
{
P1=~0x0a;
}
if(b==5)
{
P1=~0x05;
}
if(b==4)
{
P1=~0xaa;
}
if(b==3)
{
P1=~0x55;
}
if(b==2)
{
P1=~0x00;
}
if(b==1) //b=1 时重新设置b=9达到循环的目的 {
P1=~0xff;
b=9;
}
b--
}
}
4.6实验六A/D、D/A转换实验
21
微控制器技术实验报告
实验步骤:
(1)按图18连接实验线路,AD 的时钟线需要与实验平台中的系统总线单元的CLK 相连;
(2)编写实验程序,经编译、链接无误后装入系统,启动调试;
(3)将变量ADV 添加到变量监视窗口中;
(4)在Delay()处行设置断点,使用万用表测量ADJ 端的电压值,计算对应的采样值,然后运行程序;
(5)程序运行到断点处停止运行,查看变量窗口中ADV 的值,与计算的理论值进行比较,看是否一致(可能稍有误差,相差不大);
(6)调节电位器,改变输入电压,比较ADV 与计算值,反复验证程序功能;制表并记录结果。
实验接线图:
<1>A/D转换实验接线图
<2>D/A转换实验接线图
22
微控制器技术实验报告
<3>LED灯PROTEUS仿真接线图
<4>示波器波形窗口(锯齿波)
程序流程图:
23
微控制器技术实验报告
开始
对输入端采样
启动A/D转换
等待转换结束
读取转换结果
为下次采样做准备
N 结
束?
Y
结束
A/D转换实验流程图
程序清单:
A/D转换程序
#include<reg51.h>
#defineuint unsigned int
#defineuchar unsigned char
sbitOE=P2^3; //输入输出端口定义sbitEOC=P2^2;
sbitSTART=P2^1;
sbitCLK=P2^0;
uchar code
a[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //数码管数字对应的段码
Uchar
24
微控制器技术实验报告
fang[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; //产生方波的数据
uchar
sin[]={0x00,0x06,0x18,0x35,0x58,0x80,0xa8,0xcb,0xe8,0xfa,0xff,0xfa,0xe8,0xcb,0xa8,0x80,0x58,0x35,0x18,0x06}; //产生sin函数的数据
voidt0_init()
{
TMOD=0x02; //定时器工作方式选择
TH0=0x14; //技术初值设定
TL0=0x00;
TR0=1; //开始运行
ET0=1; //开定时器中断
EA=1; //开总中断
}
voidt0() interrupt 1
{
CLK=~CLK; //时钟取反,产生上升沿或下降沿
}
voidAD() //AD 处理函数
{
voiddelay(uint i); //延时子程序,等待上次转换
START=0;
START=1;
START=0;
while(EOC==0);
OE=1;
delay(2);
OE=0;
}
25
微控制器技术实验报告
voiddelay(uint i)
{
uint j;
for(j=0;j<i;j++) ;
}
ucharcheckkey() //检测按键的位置{
uchar i,j;
j=0x0f;
P3=j;
i=P3;
i=i&0x0f;
if(i==0x0f) return(0);
else
{
//delay(200);
if(i!=0x0f) return(0xff);
}
}
ucharkeyscan()
{
uchar scancode,codevalue,x,i,j,k,m=0; if(checkkey()==0) return(0xff);
else
{
scancode=0xfe;
m=0x00;
for(i=0;i<4;i++)
{
26
微控制器技术实验报告
k=0x10;
P3=scancode;
x=P3;
for(j=0;j<4;j++)
{
if((x&k)==0)
{
codevalue=m+j;
while(checkkey()!=0) ;
return(codevalue);
}
else k=k<<1;
}
m=m+4;
scancode=~scancode;
scancode=scancode<<1;
scancode=~scancode;
}
}
}
void main()
{
uint x=4,i;
t0_init();
P0=0xff;//开始运行程序时数码管不显示
P1=0x00;//程序刚运行时未按任何键,使指示灯不亮。
while(1)
{
while(1)
27
微控制器技术实验报告
{
if(checkkey()==0x00) break; //break 结束循环,
continue 结束本次循环。
else
{
x=keyscan();
P0=a[x];
}
}
if(x==0) //VOUT1 = -VREF×D/256 {
for(i=0;i<120;i++)
{
P1=i; //产生锯齿波 delay(250);
}
}
if(x==1)
{
for(i=0;i<18;i++)
{
P1=fang[i]; //产生方波 delay(250);
}
}
if(x==2)
{
for(i=0;i<120;i++)
28
微控制器技术实验报告
{
P1=i;
delay(250);
}
for(i=119;i>0;i--) //产生三角波 {
P1=i;
delay(250);
}
}
if(x==3)
{
for(i=0;i<20;i++)
{
P1=sin[i]; //产生正弦函数 delay(250);
}
}
AD();
}
}
AD/DA程序(汇编版):
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
A0: MOV P1,#0FH
MOV C,90H
JNC FANG
29
微控制器技术实验报告
MOVC,91H
MOV DPTR,#7FFFH
MOV A,#00H
MOVX @DPTR,A
JNC JU
MOV C,92H
JNC SAN
JMP A0
FANG:MOV P1,#1FH ;方波
LCALLFANGBO
JMP A0
JU: MOV P1,#2FH ;锯齿波 LCALL JUCHI
JMP A0
SAN: MOV P1,#3FH ;三角波
LCALL SANJIAO
JMP A0
FANGBO: MOV DPTR,#7FFFH
MOV A,#0FFH
MOVX @DPTR,A
LCALL DELAY
MOV A,#00H
MOVX @DPTR,A
LCALL DELAY
RET
JUCHI: MOV DPTR,#7FFFH
MOV A,#00H
A1: MOVX @DPTR,A
LCALL DELAY
INC A
CJNE A,#00H,A1
RET
SANJIAO: MOV DPTR,#7FFFH
MOV A,#00H
A2: MOVX @DPTR,A
LCALL DELAY
INC A
CJNE A,#0FFH,A2
A3: DEC A
LCALL DELAY
MOVX @DPTR,A
30
微控制器技术实验报告
CJNE A,#00H,A3
RET
DELAY: MOV R6,#0FH
DEL1: MOV R7,#0FFH
DJNZ R7,$
DJNZ R6,DEL1
RET
SJMP $
END
结果分析:A/D实验重点在于采样的时间以及转换精度。首先要考虑采样
定理,并且还要保证A/D转换所需的最短时间。另外无论A/D、D/A实验中,参
考电压Vref的精度对实验有着巨大的影响。
D/A实验主要是对输出波形的变化监视。三角波的产生原理与锯齿波相同,
只需在锯齿波计数达到最大值0FFH时,再逐渐减1减小到00H(锯齿波产生则
直接从0重新开始),如此反复。另外对波形影响较大的是保持时间,即实验中
的delay()函数决定的延迟时间。
4.7实验七 串行通讯实验
实验步骤:
(1)串口通讯实验电路如图3-7-1所示;
(2)编写实验程序,经编译、链接无误后启动调试;
(3)进入调试界面,点击命令,打开串口1监视窗口;
(4)运行实验程序,观察此时有如图3-7-2所示输出;
(5)阅读1.7节的内容,首先将系统程序由SoftICE切换到启动加载程序; (6)将编译生成的Hex文件通过SSTEasyIAP11F.EXE软件下载到单片机内部Flash中;
(7)复位单片机,打开超级终端或串口调试软件,将端口号及波特率等设置好,观察PC显示,如图3-7-3和图3-7-4所示;
(8)实验结束,重新将SoftICE下载到单片机系统区替换启动加载程序。
实验原理及原理图:
MCS-51单片机内部的全双工串行接口部分,包含有串行接收器和串行发
送器。有两个物理上的接收缓冲器和发送缓冲器。接收缓冲器只能读出接收
的数据,但不能写入。发送缓冲器只能写入发送的数据,但不能读出。因此可以
同时收、发数据,实现全双工通讯。两个缓冲器是特殊功能寄存器SBUF,它们
31
微控制器技术实验报告
公用地址为99H,SBUF 是不可位寻址的。此外,还有两个寄存器SCON 和PCON |
分别用于控制串行口的工作方式以及波特率,定时器T1可以用作波特率发生器
SSTE554RC提供了增强型全双工串行接口,具有帧错误检测和自动地址识别的功能。
由于SSTE554RC的串口用作调试目的,所以KeilC51 软件提供了串口模拟窗口,可以借助此窗口调试串口通讯程序。也可以将程序编译生成目标代码(.HEX),脱机运行。
实验接线图:
<1>串行通讯仿真接线图
32
微控制器技术实验报告
<2>仿真时键盘输入C时的界面
<3>仿真时按下4处按钮显示图像
串口程序(C语言版):
#include<reg51.h>
#include<stdio.h>
33
微控制器技术实验报告
#defineuint unsigned int
#defineuchar unsigned char
ucharcode
a[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
ucharch;
ucharcheckkey()
{
uchar i,j;
j=0x0f;
P2=j;
i=P2;
i=i&0x0f;
if(i==0x0f) return(0);
else return(0xff);
}
ucharkeyscan()
{
uchar scancode,codevalue,x,i,j,k,m=0;
if(checkkey()==0) return(0xff);
else
{
scancode=0xfe;
m=0;
for(i=0;i<4;i++)
{
k=0x10;
P2=scancode;
x=P2;
for(j=0;j<4;j++)
{
if((x&k)==0)
{
codevalue=m+j;
while(checkkey()!=0) ;
return(codevalue);
}
else k=k<<1;
}
m=m+4;
scancode=~scancode;
scancode=scancode<<1;
scancode=~scancode;
}
34
微控制器技术实验报告
}
}
voidscon_init(void)
{
SCON=0x50;//串口工作方式一,允许接收。
TMOD=0x20;//T1 工作方式2
PCON=0x00;//波特率不加倍
TH1=0xfd;
TL1=0xfd; //波特率为9600bps
TI=0;
RI=0;
TR1=1; //启动定时器
ES=1; //串口中断允许
EA=1;
ET1=0; //定时器T1中断屏蔽
}
voides() interrupt 4 //串口中断函数{
if(TI) TI=0;
if(RI)
{
RI=0;
ch=SBUF;
}
}
voiddisplay(uchar q)
{
switch(q)
{
case 0x30: P1=0x3f;break;
case 0x31: P1=0x06;break;
case 0x32: P1=0x5b;break;
case 0x33: P1=0x4f;break;
case 0x34: P1=0x66;break;
case 0x35: P1=0x6d;break;
case 0x36: P1=0x7d;break;
case 0x37: P1=0x07;break;
case 0x38: P1=0x7f;break;
case 0x39: P1=0x6f;break;
case 0x41: P1=0x77;break;
case 0x42: P1=0x7c;break;
case 0x43: P1=0x39;break;
case 0x44: P1=0x5e;break;
case 0x45: P1=0x79;break;
35
微控制器技术实验报告
case 0x46: P1=0x71;break;
}
}
voidmain()
{
uchar x,b;
scon_init();
P0=0x00;
P1=0x00;
while(1)
{ while(1)
{
if(checkkey()==0x00) break; //结束本次循环 else
{
x=keyscan();
P0=a[x];
}
if(x<=9)
b=x+0x30;
else
b=x+0x37;
SBUF=b;
}
display(ch);
}
}
串口程序(汇编版):
AJMPMAIN
ORG0023H
AJMP URT
ORG0030H
MAIN: MOV P1,#00H
LCALLURTINIT
START:MOV P0,#0FH
MOVA,P0
CPLA
ANLA,#0FH
JZ START
LCALLDELAY
MOVP0,#0FH
MOVA,P0
36
微控制器技术实验报告
ANLA,#0FH
MOVR7,A
MOVP0,#0F0H
MOVA,P0
ANLA,#0F0H
ORLA,R7
CJNEA,#0EEH,K1
MOVA,#30H
MOVSBUF,A
JNBTI,$
CLRTI
K1:CJNE A,#0DEH,K2
MOVA,#31H
MOVSBUF,A
JNBTI,$
CLRTI
K2:CJNE A,#0BEH,K3
MOVA,#39H
MOVSBUF,A
JNBTI,$
CLRTI
KA:CJNE A,#0BBH,KB MOV A,#32H
MOVSBUF,A
JNBTI,$
CLRTI
K3:CJNE A,#7EH,K4
MOVA,#33H
MOVSBUF,A
JNBTI,$
CLRTI
K4:CJNE A,#0EDH,K5
MOVA,#34H
MOVSBUF,A
JNBTI,$
CLRTI
K5:CJNE A,#0DDH,K6
MOVA,#35H
MOVSBUF,A
JNBTI,$
CLRTI
K6:CJNE A,#0BDH,K7
MOVA,#36H
MOVSBUF,A
JNBTI,$
37
微控制器技术实验报告
CLRTI
K7:CJNE A,#7DH,K8
MOVA,#37H
MOVSBUF,A
JNBTI,$
CLRTI
K8:CJNE A,#0EBH,K9
MOVA,#38H
MOVSBUF,A
JNBTI,$
CLRTI
K9:CJNE A,#0DBH,KA
MOVA,#41H
MOVSBUF,A
JNBTI,$
CLRTI
KB:CJNE A,#7BH,KC
MOVA,#42H
MOVSBUF,A
JNBTI,$
CLRTI
KC:CJNE A,#0E7H,KD
MOVA,#43H
MOVSBUF,A
JNBTI,$
CLRTI
KD:CJNE A,#0D7H,KE
MOVA,#44H
MOVSBUF,A
JNBTI,$
CLRTI
KE: CJNE A,#0B7H,KF
MOVA,#45H
MOVSBUF,A
JNBTI,$
CLRTI
KF: CJNE A,#77H,K0
MOVA,#46H
MOVSBUF,A
JNBTI,$
CLRTI
K0:LJMP START
URTINIT:
MOVSCON,#50H ;设置成串口工作方式在8位URT
38
微控制器技术实验报告
MOVTMOD,#20H ;设置T1为可重装8位定时器MOVTL1,#0FDH ;256-FOSC/BTL/32/12
MOVTH1,#0FDH
SETBTR1 ;开启定时器
SETBES ;开启串口中断
SETBEA ;开总中断
RET
URT:
CLRC
MOVA,SBUF ;接收到数据后将数据返回
MOVP1,A
NEXT1:CLRRI ;清接收中断标志
RETI
DELAY:MOV R6,#0ffh
DEL1: MOVR5,#0ffh
DJNZ R5,$
DJNZ R6,DEL1
RET
END
结果分析:串行总线是单片机的特色。本实验通过两种方式验证的串口的通
信。ISP模式下,采用计算机软件实现串口监视。另一种是指IAP模式下,对输
入计算机串口的数据进行跟踪。串行通信的重点在于异步通信时波特率的选择,
以及传送位数的规定。通过串口的通讯,计算机可以实现与D/A、A/D、PC机以
及其他单片机的通信,还可以由不同的协议构成各种网络结构,方便了单片机系
统的嵌入式应用。
39
微控制器技术实验报告
五、结束语
单片机实验对于我学习单片机是一个非常好的平台,因为在课
堂上学到的知识,我可以在实验室运用起来,这样让我感觉我至少可
以做出点什么。身为一名电气自动化的“工科女”,学单片机或者微
机这样的跟硬件打交道的课程实属不易,课外我啃了很多书籍比如
《51单片机的开发实例》、《嵌入式系统开发》等,从那些书本中我
学到了更为广泛的技巧,同时也加深了我个人对编程以及项目开发的
兴趣。
做实验的过程中,我比较倾向于用C语言来实现算法的功能,因
为我们课程本身就是针对C51这一编程体系编写的,此时如果再去用
汇编写的话,即使能达到提高代码执行效率的效果,但是同时违背了
本课程的初衷。所以在大部分的基础程序以及提高部分的程序之中,
我大多数都是在C语言开发环境下进行编写的,这样也显得十分简洁,
看起来也显得靓丽十足。
此次实验中利用到的编程软件为KeilC51 μVision2,对我们而言
这是一个全新的软件,就像上学期的MASM一般,但这个软件上手也
比较简单,对照着教材上的第五章的内容,我按步骤一步一步的进行
着:建立工程、添加C文件、写代码、设置Target选项、生成HEX文件(或
者进行proteus下的仿真运行。经过几次寝室里的操作,我也十分熟练
的掌握了这个软件,这让我也体会到了一点成功的喜悦。
在实验过程中,我也遇到了很多问题,起初连proteus和Keil的联
机调试都不会,但是通过和学长的交流,我慢慢熟练起来,所以实验
室也给了我们优秀的师生资源,这对于完成实验是非常重要的。
40
Copyright © 2019- huatuo6.cn 版权所有 赣ICP备2024042791号-9
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务