while(!TI); TI=0; } }
实验2程序代码: #include
char message[]={\ TMOD=0X20; TH1=0XFD; TL1=0XFD; TR1=1;
SM0=0; //串口工作方式选择位10位异步收发,波特率由定时器1控制 SM1=1;
REN=1; //允许串口接收位 EA=1; ES=1;
while(1) {
i=0;
while(message[i]!='\\0') {
SBUF=message[i]; while(!TI); TI=0; i++; } } }
代码中,char message[]={\不可改为char code
message[]={'0','1','2','3','4','5','6','7','8','9'};否则不可使用while(message[i]!='\\0')判断。
思考题代码:
#include
TMOD=0X20; TH1=1; TL1=1; TR1=1; SM0=0;
21
SM1=1; REN=1; EA=1; ES=1; }
void main() {
init(); while(1) {
if(flag) {
SBUF=date; while(!TI); TI=0; }
P0=date; } }
void chuankou() interrupt 4 {
RI=0;
date=SBUF; flag=1; }
实验九 8255接口扩展(一)
一、实验目的
掌握单片机外部扩展接口技术,熟悉8255的扩展方法及其性能。
二、实验设备及器材
单片机实验箱一台;PC机一台;USB下载线一根。
三、实验内容及步骤
(1)自行编制程序:要求用8255的PA口接按键作输入口,PB口接发光二极管作输出口;从PA口读取输入的按键状态送到PB口以发光二极管显示。
(2)自行编制程序:要求用8255的B口做输出口,控制八位发光二极管的亮、灭,使发光二极管从左向右移位点亮,再从右向左移位点亮。
22
(3)请在实验箱上用8255实现以下功能:8255 B、C口输出方波,即在8255的B、C口可观察发光二极管的闪烁变化。
图9-1 8255接口扩展原理图
四、思考题
1.8255的功能是什么?
2.如何计算8255的端口地址? 实验1程序代码: #include
#define PA XBYTE[0xbcff]
23
#define PB XBYTE[0xbd0f] #define PC XBYTE[0xbeff]
#define COM8255 XBYTE[0xbfff] void delayms(int a) {
int n,m;
for (n=a;n--;n>0)
for (m=125;m>0;m--); }
void main() {
COM8255=0x90; while(1) {
PB=PA;
delayms(100); } }
实验2代码:
#include
#define PA XBYTE[0xbcff] #define PB XBYTE[0xbdff] #define PC XBYTE[0xbeff]
#define COM8255 XBYTE[0xbfff]
char code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; void delayms(int a) {
int n,m;
for (n=a;n--;n>0)
for (m=110;m--;m>0); }
void main() {
char i;
COM8255=0x80; while(1) {
for(i=0;i<8;i++) {
PB=table[i]; delayms(100); }
for(i=7;i>=0;i--)
24
{
PB=table[i]; delayms(100); }
} }
实验3代码:
#include
#define PA XBYTE[0xbcff] #define PB XBYTE[0xbdff] #define PC XBYTE[0xbeff]
#define COM8255 XBYTE[0xbfff] void delayms(int a) {
int n,m;
for (n=a;n--;n>0)
for (m=110;m--;m>0); }
void main() {
COM8255=0x80; while(1) {
PB=0x00; PC=0x00; delayms(50); PB=0XFF; PC=0XFF; delayms(50); } }
实验十 8255接口扩展(二)
一、实验目的
掌握可编程I/O接口芯片8255的接口原理,熟悉对8255初始化编程和输入、输出软件的设计方法。
二、实验设备
25