微控制器技术
——实验报告
班级:自动化0703
姓名:谢 鹏
学号:0901070316
目录:
一:实验目的及要求……………………………………(2)
二:实验基本内容(TD-51单片机实验系统实现)……(2)
三:实验报告基本内容要求……………………………(3)
四:实验系统简介………………………………………(4)
实验一到实验三 …………………………(6)
实验四…………………………………… (11)
实验五…………………………………… (14)
实验六…………………………………… (15)
实验七…………………………………… (16)
实验八…………………………………… (18)
微控制器技术实验说明
一、 实验目的及要求:
1、学习Keil C51集成开发工具的操作及调试程序的方法,包括:仿真调试与脱机运行间的切换方法;
2、熟悉TD-51单片机系统板及实验系统的结构及使用;
3、进行MCS51单片机指令系统软件编程设计与硬件接口功能设计;
4、学习并掌握Keil C51与Proteus仿真软件联机进行单片机接口电路的设计与编程调试;
5、完成指定MCS51单片机综合设计题
二、 实验基本内容(TD-51单片机实验系统实现)
实验一 清零程序与拆字程序设计
根据实验指导书之“第二章 单片机原理实验”(P17~P23页)内容,熟悉实验环境及方法,完成思考题1、2(P23)基础实验项目。
实验二 拼字程序与数据传送程序设计
汇编语言完成实验指导书P24思考题3、4题的基础实验项目。
实验三 排序程序与散转程序设计
汇编语言完成实验指导书P24思考题5、6题的基础实验项目。
实验四 静态存储器扩展实验
基本部分:阅读、验证C语言程序功能。使用汇编语言编程,完成实验指导书之“4.1 静态存储器扩展实验”基本实验项目(P57)。
提高部分:阅读、验证C语言程序功能。使用汇编语言编程,完成实验指导书之“4.2 FLASH存储器扩展实验”实验项目(P60)。
实验五 数字量输入输出实验
基本部分:阅读、验证C语言程序功能。使用汇编语言编程,完成实验指导书之“3.1 数字量输入输出实验”基本实验项目(P36),。
提高部分:(任选一题)
题目一:LED交通灯控制(使用8255接口芯片)
要求:使用汇编语言编程,功能为:通过开关实现LED灯工作方式即时控
制,完成LED交通灯的开关控制显示功能和LED交通灯自动循环显示功能。
题目二:LED灯控制(使用8255接口芯片)
要求:使用汇编语言编程,功能为:通过KK1实现LED灯工作方式即时控
制,完成LED开关控制显示和LED灯左循环、右循环、间隔闪烁功能。
题目三:键盘扫描与数码管显示设计(
要求:阅读、验证P69上的C
语言参考程序功能。使用汇编语言完成编程与功能调试。
实验六 定时器/计数器实验
基本部分:阅读、验证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.3 A/D转换实验”项目(P64)和“4.4 D/A转换实验”项目(P67)。
提高部分:(要求:Proteus环境下完成)
小键盘给定(并显示工作状态),选择信号源输出波形类型(D/A转换方式),经过A/D采样后,将采样数据用LED灯,显示当前模拟信号值大小及变化状态。
实验八 串行通讯实验
基本部分:阅读、调试C语言程序功能。使用汇编语言编程,完成实验指导书之“3.7 串口通讯实验”项目。(要求:实验仪器上完成)
提高部分:(要求:Proteus环境下完成)
题目一:利用单片机实验系统,实现与PC机通讯。功能要求:将从实验系统键盘上键入的数字,字母显示到PC机显示器上,将PC机键盘输入的字符(0-F)显示到单片机实验系统的数码管上。
题目二:进行实验七、实验八实验内容综合。
三、 实验报告基本内容要求
1、 实验题设计内容、目的和要求;2、软件、硬件环境要求; 3、给出硬件电路原理图并分析; 4、程序设计框图及程序清单; 5 、实验调试步骤及结果分析;6、结论
实验系统简介:
随着单片机技术的发展,八位单片机的功能发生了很大的变化。由简单的MCS-51 向嵌入式、增强型51 内核单片机发展,使用在系统可编程(ISP)技术、在应用可编程技术(IAP)以及内嵌仿真功能的单片机层出不穷。先进技术的发展使得单片机调试、开发的手段发生了天翻地覆的变化。TD-51 系统板是西安唐都科教仪器公司为TD 系列微机接口教学平台配套推出的扩展件,使用该系统板配合接口教学实验平台可以完成单片机原理及应用的学习。TD-51 系统板的出现为广大师生用户提供了一套廉价、实用的单片机实验教学方案。
TD-51 系统板的构成及特点:
1、 系统构成
TD-51 系统板为开放的最小单片机系统,采用具有在系统可编程和在应用可编程技术的增强型51 单片机,单片机内置仿真程序,可以实现调试、仿真功能,配合TD 系列微机接口教学 实验平台可开展单片机原理及应用的实验教学。
2 系统功能特点
1. 取代硬件仿真器的增强型单片机
系统采用具有在系统可编程(ISP)和在应用可编程(IAP)技术的增强型51 单片机,单片机内置仿真程序,完全取代传统的硬件仿真器和编程器。这种先进的单片机将仿真系统和应用系统合二为一,大大降低了应用开发成本,极大地提高了研发效率。把单片机的仿真开发和应用设计提高到一个崭新的技术领域。
2. 先进的集成开发调试环境
使用业界著名的Keil C51 集成开发环境作为实验设计、调试的工具。Keil C51 提供了强大的调试功能,可单步、断点、全速运行程序,可观察寄存器区、ROM 变量区、RAM 变量区等的内容。支持汇编语言和C 语言的源语言调试。
3. 灵活的组合方式
采用开放的系统板结构,可以灵活地配合各型号接口实验平台开展单片机的应用教学。
4. 丰富的实验内容
提供了丰富的原理及接口应用实验。配合接口实验平台可完成数字量输入/输出、中断、定时器/计数器、看门狗、低功耗、PCA、串口通讯、静态存储器、FLASH、A/D、D/A、键盘及数码显示、电子音响、点阵LED、LCD、步进电机、直流电机、温度控制等实验内容。
通过TD-51 系统板可以开展各种单片机实验,具体包括:
1. 单片机原理原
(1)系统认识实验
(2)数码转换实验
(3)运算程序设计实验
(4)查表程序设计实验
(5)数据排序实验
(6)位操作实验
2. 单片机集成功能模块模
(1)数字量输入/输出实验
(2)中断系统实验
(3)定时器/计数器实验
(4)看门狗实验
(5)低功耗实验
(6)PCA 实验
(7)串口通讯实验
3. 单片机系统扩展扩
(1)静态存储器扩展实验
(2)FLASH 扩展实验
(3)A/D 转换实验
(4)D/A 转换实验
(5)8255 键盘及数码显示实验
(6)电子发声实验
(7)点阵LED 实验
(8)LCD 图形液晶实验(选配)
4. 单片机控制应用应
(1)步进电机实验(选配)
(2)直流电机实验
(3)温度闭环控制实验
实验一到实验三:
(1) 清零程序:把 7000H –7FFFH 的内容清零。
(2) 折字程序:把 7000H 的内容拆开,高位送 7001H 低位,低位送 7002H 低位。7001H,7002H高位清零,一般本程序用于把数据送显示缓冲区时用。
(3) 拼字程序:把 7000H,7001H 的低位相拼后送人 7002H,一般本程序用于把显示缓冲区的数据取出拼装成个字节。
(4) 数据传输子程序:把(R2,R3)源 RAM 区首址内的(R6,R7)个字节数据,传送到(R4,R5)目的 RAM 区。
(5) 编写散转程序,根据 8032 片内 20H 中的内容(00 或 01 或 02 或 03)进行散转。
6) 编写并调试一个排序子程序,其功能为用冒泡法将内部 RAM 中几个单元字节无符号的正整数,按从小到大的次序重新排列。
(1): 清零程序:把 7000H –7FFFH 的内容清零。
程序清单:
ORG 00H
AJMP MAIN
ORG 30H
MAIN: MOV SP,#5FH
MOV R1,#00H
MOV DPTR,#7000H
LOOP: CLR A
MOVX @DPTR,A
INC DPTR
INC R1
CJNE R1,#0FFFH,LOOP
MOV DPTR,#7000H
MOV R1,#00H
SJMP $
END
(2)拆字程序:把 7000H 的内容拆开,高位送 7001H 低位,低位送 7002H 低位。7001H,7002H高位清零,一般本程序用于把数据送显示缓冲区时用。
程序清单:
ORG 0000H
AJMP START
ORG 000BH
START:MOV A,#26H ;给累加器a赋值
MOV DPTR,#7000H ;数据指针指向片外7000h单元
MOVX @DPTR,A ;将a中的数送给7000h单元
MOVX A,@DPTR ;将7000h单元中的内容取出
MOV R0,A ;将内容保存起来
ANL A,#0F0H ;将低四位清零
SWAP A ;高低位转换
MOV DPTR,#7001H ;数据指针指向7001h单元
MOVX @DPTR,A ;将高四位存入7001h中
MOV A,R0 ;取出7000h单元中的内容
ANL A,#0FH ;将高四位清零
MOV DPTR,#7002H ;数据指针指向7002h单元
MOVX @DPTR,A
END
(3)拼字程序:把 7000H,7001H 的低位相拼后送入 7002H,一般本程序用于把显示缓冲区的数据取出拼装成个字节。
程序清单:
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN:MOV DPTR,#7000H
MOV A,#26H
MOVX @DPTR,A
MOV DPTR,#7001H
MOV A,#5FH
MOVX @DPTR,A ;给7000h7001h赋初值
MOV DPTR,#7000H
MOVX A,@DPTR
SWAP A
ANL A,#0F0H
MOV R1,A ;取出7000h的低四位放入r1中,并作为高四位
MOV DPTR,#7001H
MOVX A,@DPTR
ANL A,#0FH ;取出7001h的低四位作为低四位放入A中
ORL A,R1 ;将r1和A内容相或拼起来
MOV DPTR,#7002H
MOVX @DPTR,A ;拼好后的内容放于7002中
END
(4) 数据传输子程序:把(R2,R3)源 RAM 区首址内的(R6,R7)个字节数据,传送到(R4,R5)目的 RAM 区。
ORG 0000H
AJMP MAIN
ORG 0100H
LOOP EQU 50H
MAIN:MOV R2,#70H
MOV R3,#00H 程序流程图:
MOV R4,#70H
MOV R5,#20H
MOV R6,#00H
MOV R7,#05H
MOV DPH,R6
MOV DPL,R7
MOV A,#05H
MOVX @DPTR,A
MOV LOOP,A ;字节数
CS: MOV DPH,R2
MOV DPL,R3
MOVX A,@DPTR ;首地址值里的内容
MOV DPH,R4
MOV DPL,R5
MOVX @DPTR,A ;首地址内容传送到R4R5的地址
CLR C ;进位端清零
MOV A,R3
ADD A,#01H
MOV R3,A
JC C1
JMP C3
C1: MOV A,R2
ADD A,#01H
MOV R2,A ;地址后移
C3: CLR C
MOV A,R5
ADD A,#01H
MOV R5,A
CLR A
ADDC A,R4 ;R4R5地址后移
MOV R4,A
C4: DJNZ LOOP,CS
SJMP $
END
(5) 编写散转程序,根据 8032 片内 20H 中的内容(00 或 01 或 02 或 03)进行散转。
程序清单:
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN: MOV A,20H
RL A ;累加器a中的值乘2
MOV DPTR,#TABLE
JMP @A+DPTR
TABLE:AJMP CX0
AJMP CX1
AJMP CX2
AJMP CX3
CX0:MOV A,#10H
SJMP MAIN
CX1:MOV A,#11H
SJMP MAIN
CX2:MOV A,#12H
SJMP MAIN
CX3:MOV A,#13H
SJMP MAIN
END
(6) 编写并调试一个排序子程序,其功能为用冒泡法将内部 RAM 中几个单元字节无符号的正整数,按从小到大的次序重新排列。
ORG 0000H
AJMP MAIN
ORG 0100H
TABLE:DB 7,6,5,0,9
DB 2,1,8,4,3
SDZ EQU 30H
CNT EQU 0AH
MAIN: MOV DPTR,#TABLE
MOV R0,#SDZ
MOV R7,#CNT ;数列长度
CHAB:CLR A
MOVC A ,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
DJNZ R7,CHAB
START:MOV R7,#CNT ;置外循环次数
LOOP0:MOV R6,#CNT-1 ;置内循环次数
MOV R0,#SDZ
LOOP1:CLR C
MOV A,@R0
MOV 50H,A ;保存前数
INC R0
MOV A,@R0 ;取后数
SUBB A,50H
JC LOOP3 ;若后数小于前数,则交换
SJMP LOOP4 ;若后数大于前数,则不交换
LOOP3:MOV A,@R0
DEC R0
XCH A,@R0
INC R0
MOV @R0,A ;数据交换
LOOP4:DJNZ R6,LOOP1 ;内循环计数器减一
DJNZ R7,LOOP0 ;外循环计数器减一
;SJMP $
END
实验四 静态存储器扩展实验
基本部分:阅读、验证C语言程序功能。使用汇编语言编程,完成实验指导书之“4.1 静态存储器扩展实验”基本实验项目(P57)。
提高部分:阅读、验证C语言程序功能。使用汇编语言编程,完成实验指导书之“4.2FLASH存储器扩展实验”实验项目(P60)。
(1)静态存储器扩展实验
实验目的:
1. 掌握单片机系统中存储器扩展的方法;
2. 掌握单片机内部RAM 和外部RAM 之间数据传送的特点。
实验内容
编写实验程序,在单片机内部一段连续RAM 空间30H~3FH 中写入初值00H~0FH,然后将这16 个数传送到RAM 的0000H~000FH 中,最后再将外部RAM 的0000H~000FH 空间的内容传送到片内RAM 的40H~4FH 单元中。
实验步骤
1. 按图4-1-2 连接使用电路;
2. 按实验内容编写实验程序,经编译、链接无误后启动调试;
3. 打开存储器观察窗口,在存储器#1 的Address 中输入D:0x30,在存储器#2 的Address中输入X:0x0000 来监视存储器空间;
4. 可单步运行程序,观察存储器内容的变化,或在while(1)语句行设置断点再运行程序,
验证实验功能。
图4-1-2 扩展存储器实验线路图
(2)FLASH 存储器扩展实验
实验目的
1. 学习FLASH 存储器的工作原理与读/写方式;
2. 了解AT29C010 的编程特性。
实验内容
编写实验程序对FLASH ROM 进行操作,要求对FLASH 的读/写、数据保护功能、芯片擦除等特性进行验证。带保护写入0~127 共128 个数,不带保护写入0x55 共128 个。
实验原理
在系统可编程可擦除只读存储器FLASH 通常称为“闪存”,该类型的存储器具有掉电时数据不丢失、扇区编程、 芯片擦除、单一供电和高密度信息存储等特性,主要用于保
存系统引导程序和系统参数等需要长期保存的重要信息,现广泛应用于各种产品中。
芯片擦除:AT29C010A 可以对整个芯片进行擦除,通过写入六个连续的命令实现,具体命令序列如图4-2-3 所示。
实验程序清单: (Flash.C)
#define START_ADDR ((unsigned char volatile xdata *) 0x0000)
#define ADDR_UNLOCK1 ((unsigned char volatile xdata *) 0x5555)
#define ADDR_UNLOCK2 ((unsigned char volatile xdata *) 0x2AAA)
sfr AUXR = 0x8E;
void delay()
{
unsigned int i;
for(i=0; i<1000; i++);
}
void unprotect() // 取消软件数据保护
{
*ADDR_UNLOCK1 = 0xAA;
*ADDR_UNLOCK2 = 0x55;
*ADDR_UNLOCK1 = 0x80;
*ADDR_UNLOCK1 = 0xAA;
*ADDR_UNLOCK2 = 0x55;
*ADDR_UNLOCK1 = 0x20;
}
void erase() // 芯片擦除
{
*ADDR_UNLOCK1 = 0xAA;
*ADDR_UNLOCK2 = 0x55;
*ADDR_UNLOCK1 = 0x80;
*ADDR_UNLOCK1 = 0xAA;
*ADDR_UNLOCK2 = 0x55;
*ADDR_UNLOCK1 = 0x10;
}
void unp_write() // 无保护写
{
unsigned int i;
unsigned char *Des;
Des = START_ADDR;
for(i=0; i<128; i++)
{
*Des = 0x55; //全部写0x55
Des++;
}
}
void p_write() // 带保护写
{
unsigned int i;
unsigned char *Des;
Des = START_ADDR;
*ADDR_UNLOCK1 = 0xAA;
*ADDR_UNLOCK2 = 0x55;
*ADDR_UNLOCK1 = 0xA0;
for(i=0; i<128; i++) //写0~128 到Flash
{
*Des = i;
Des++;
}
}
void main()
{
AUXR = 0x2;
①p_write(); // 带保护写
delay();
②unp_write(); // 不带保护写
delay();
unprotect(); // 去除保护
③unp_write();
delay();
④erase(); // 擦除
while(1);
}
实验步骤:
1. 按图4-2-4 连接实验电路;
2. 编写实验程序,可参考上述程序,编译、链接后启动调试;
3. 打开存储器观察窗口,在存储器#1 的Address 栏内输入X:0x0000,查看存储器的内容;
4. 执行完标号为①的函数,带保护写Flash,写入内容0~7F,观察存储器窗口;
5. 执行完标号为②的函数,不带保护写Flash,观察存储器窗口,正确情况下数据不会改变,仍为0~7F;
6. 执行完标号为③的函数,首先会去除写保护,然后不带保护写Flash,观察存储器窗口,此时应显示128 个55;
7. 执行完标号为④的函数,可以将整个Flash 擦除,观察存储器窗口,内容变为全FF,表示Flash 已被擦除;
8. 通过一步一步实验,了解Flash 的特性,实验结束,按复位按键退出调试。
实验五 数字量输入输出实验
基本部分:阅读、验证C语言程序功能。使用汇编语言编程,完成实验指导书之“3.1 数字量输入输出实验”基本实验项目(P36),。
题目:LED灯控制(使用8255接口芯片)
要求:使用汇编语言编程,功能为:通过KK1实现LED灯工作方式即时控制,完成LED开关控制显示和LED灯左循环、右循环、间隔闪烁功能。
实验内容
P1 口是8 位准双向口,每一位均可独立定义为输入输出。编写实验程序,将P1 口的低4位定义为输出,高4 位定义为输入,数字量从P1 口的高4 位输入,从P1 口的低4 位输出控制发光二极管的亮灭。
程序清单:
定时器控制LED灯:
#include "SST89x5x4.h"
#include "Intrins.h"
sbit P10Value = P1^0;
sbit P11Value = P1^1;
sbit P12Value = P1^2;
sbit P13Value = P1^3;
sbit P14Value = P1^4;
sbit P15Value = P1^5;
sbit P16Value = P1^6;
sbit P17Value = P1^7;
void main()
{
int i=0;
P1=0X00;
TMOD = 0x11; //设定定时器1定时方式
TH1 = 0xf8; //计数初值
TL1 = 0x00;
TR1 = 1; //启动定时器1
while(1)
{
P1=0X00;
while(TF1==0); //判定时器1溢出标志
if(i==0)
{
P10Value=~P10Value;
P12Value=~P12Value;
i=i+1;
TF0=0;
TH0=0Xf8;
TL0=0X00;
}
if(i==1)
{
P11Value=~P11Value;
P13Value=~P13Value;
i=i+1;
TF0=0;
TH0=0Xf8;
TL0=0X00;
}
if(i==2)
{
P14Value=~P14Value;
P16Value=~P16Value;
i=i+1;
TF0=0;
TH0=0Xf8;
TL0=0X00;
}
if(i==3)
{
P15Value=~P15Value;
P17Value=~P17Value;
i=i+1;
TF0=0;
TH0=0Xf8;
TL0=0X00;
}
if(i==4)
{
P10Value=~P10Value;
P12Value=~P12Value;
P14Value=~P10Value;
P16Value=~P12Value;
i=i+1;
TF0=0;
TH0=0Xf8;
TL0=0X00;
}
if(i==5)
{
P11Value=~P11Value;
P13Value=~P13Value;
P15Value=~P15Value;
P17Value=~P17Value;
i=i+1;
TF0=0;
TH0=0Xf8;
TL0=0X00;
}
if(i==6)
{
P1=0Xff;
i=i+1;
TF0=0;
TH0=0Xf8;
TL0=0X00;
}
if(i==7)
{
P1=0X00;
i=0;
TF0=0;
TH0=0Xf8;
TL0=0X00;
}
}
}
实验七 A/D、D/A转换实验
基本部分:阅读、验证C语言程序功能。使用汇编语言编程,完成实验指导书之“4.3 A/D转换实验”项目(P64)和“4.4 D/A转换实验”项目(P67)。
提高部分:(要求:Proteus环境下完成)小键盘给定(并显示工作状态),选择信号源输出波形类型(D/A转换方式),经过A/D采样后,将采样数据用LED灯,显示当前模拟信号值大小及变化状态。
实验目的
1. 学习数/模转换的基本原理
2. 掌握 DAC0832 的使用方法。
实验内容
设计实验电路图实验线路并编写程序,实现 D/A 转换,要求产生锯齿波、脉冲波,并用示波器观察电压波形。
实验原理
D/A 转换器是一种将数字量转换成模拟量的器件,其特点是:接收、保持和转换的数字信息,不存在随温度、时间漂移的问题,其电路抗干扰性较好。大多数的 D/A 转换器接口设计主要围绕 D/A集成芯片的使用及配置响应的外围电路。DAC0832 是 8 位芯片,采用 CMOS 工艺和 R-2RT 形电阻解码网络,转换 WR1 结果为一对差动电流 Iout1 和 Iout2 输出,其主要性能参数如表 4-4-1 示,引脚如图 4-4-1所示。
实验步骤
1. 实验接线图如图 4-4-2 所示,按图接线;
2. 编写实验程序,经编译、链接无误后装入系统,启动调试;
3. 运行程序,用示波器测量 DA 的输出,观察实验现象;
4. 自行编写实验程序,产生三角波形,使用示波器观察输出,验证程序功能。
实验程序清单:(DA0832.C)
#include <Absacc.h>
#define DA XBYTE[0x7FFF]
void main(void)
{
unsigned int i;
while(1)
{
for(i=0; i<255; i++)
DA = i; //写DA
}
}
实验八 串行通讯实验
基本部分:阅读、调试C语言程序功能。使用汇编语言编程,完成实验指导书之“3.7 串口通讯实验”项目。(要求:实验仪器上完成)
提高部分:(要求:Proteus环境下完成)
题目:利用单片机实验系统,实现与PC机通讯。功能要求:将从实验系统键盘上键入的数字,字母显示到PC机显示器上,将PC机键盘输入的字符(0-F)显示到单片机实验系统的数码管上。
实验目的
1. 学习MCS-51 单片机串口的工作原理及程序设计;
2. 了解使用SSTEasyIAP11F.EXE 软件实现程序脱机运行的方法;
3. 熟悉启动加载代码与SoftICE 相互切换的方法。
实验原理
MCS-51 单片机内部的全双工串行接口部分,包含有串行接收器和串行发送器。有两个物理上独立的接收缓冲器和发送缓冲器。接收缓冲器只能读出接收的数据,但不能写入。发送缓冲器只能写入发送的数据,但不能读出。因此可以同时收、发数据,实现全双工通讯。两个缓冲器是特殊功能寄存器SBUF,它们公用地址为99H,SBUF 是不可位寻址的。此外,还有两个寄存器SCON 和PCON 分别用于控制串行口的工作方式以及波特率,定时器T1 可以用作波特率发生器 SST89E554RC 提供了增强型全双工串行接口,具有帧错误检测和自动地址识别的功能。 由于SST89E554RC 的串口用作调试目的,所以Keil C51 软件提供了串口模拟窗口,可以借助此窗口调试串口通讯程序。也可以将程序编译生成目标代码(.HEX),脱机运行。
实验内容
编写实验程序,每隔一定的时间单片机向串口发送一次数据“Xi’an Tangdu Corp.”。
实验步骤
实验参考程序:(Serial.C)
#include "REG51.h"
#include "stdio.h"
/************************************************************
* 函数原型: void Init_Serial(void) *
* 函数描述: 初始化串口,晶振为11.0592MHz,波特率为19200bps *
************************************************************/
void Init_Serial(void)
{
SCON = 0x50; // 串口工作方式1
TMOD = (TMOD&0x0F)|0x20; // 选择定时器1 方式2
PCON = 0x80; // 波特率倍增
TH1 = 0xFD; // 计数初值, 19200bps
TR1 = 1; // 启动定时器1
ES = 0;
}
void delay(void)
{
unsigned int i;
for(i=0; i<35000; i++);
}
void main(void) //====== 主程序 ======//
{
Init_Serial();
SBUF=0x00;
while(1)
{
printf("Xi'an Tangdu Corp.\n");
delay();
}
}
(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 下载到单片机系统区替换启动加载程序。