MCS-51微机接口大作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《微机接口技术》
大作业
作业要求:
设计一外部设备监控系统,采用CPU为51系列单片机,用C51或ASM51编写软件,给出SCH原理图和软件清单(要求有功能注释),系统要求如下:
①系统带有电子时钟,2路模拟量和8路数字量的检测;
②4个按键,分别为设置、+、-、->可以可以完成相应的设置过程(包括时间设置和外部监控值的上下限设置);
③采用I2C 8583时钟芯片(可以查相关资料);
④8个8段LED显示(可以采用SPI总线芯片7219)以辅助完成设置,显示内容:时-分-秒;
⑤8个按键分别可以模拟外部8个故障点;
⑥2路电位器可以模拟外部模拟信号;
⑦EEPROM(I2C总线芯片24c256)保存最近100个外部故障数据(包含故障点和故障时间);
⑧RS485上位机接口。
系统软件完成的功能:
①上电时电子钟方式显示当前时间;
②设置按键进入设置状态,可以重新设置新时间值和外部监控值的上下限,结果写入8583。设置完成后电子钟方式显示当前时间;
③实时监测外部8个数字故障点和模拟数字,一旦故障记录其故障数据、故障发生时间和恢复时间;
④上位机传来命令字0xaa向上位机发送所保存的外部故障数据,发送完成后清除保存数据。(自定义通讯协议)。
一、元器件选择
芯片名称型号接口类型线数其它AD转换芯片TLC1549 SPI 3 2块共阴极数码管显示驱动器MAX7219 SPI 3
时钟芯片PCF8583 I2C 2
EPROM 24WC256 I2C 2
串口RS485 MAX487E 3
二、MCS-51单片机引脚连接
单片机I/O 引脚
外部器件连接及功用
器件名称引脚代号功用
P0^0 SW1 按钮1,模拟外部故障点1
P0^1 SW2 按钮2,模拟外部故障点2
P0^2 SW3 按钮3,模拟外部故障点3
P0^3 SW4 按钮4,模拟外部故障点4
P0^4 SW5 按钮5,模拟外部故障点5
P0^5 SW6 按钮6,模拟外部故障点6
P0^6 SW7 按钮7,模拟外部故障点7
P0^7 SW8 按钮8,模拟外部故障点8
P1^0 MAX7219 DIN 数码管显示串行数据输入端
P1^1 MAX7219 LOAD 数码管显示数据锁存端
P1^2 MAX7219 CLK 数码管显示时钟输入端
P1^3 --- --- ---
P1^4 SPI/TLC1549 CS 模拟SPI片选信号
P1^5 SP I/TLC1549 DA TA OUT 模拟SPI数据传送位
P1^6 SP I/TLC1549 CLK 模拟SPI时钟控制位
P1^7 --- --- ---
P2^0 --- --- ---
P2^1 SW9 按钮9,系统参数“设置”键
P2^2 SW10 按钮10,系统参数增加“+”键
P2^3 SW11 按钮11,系统参数减小“-”键
P2^4 SW12 按钮12,系统参数项目选择“->”键P2^5 --- --- ---
P2^6 MAX487E DE 485串口通信
P2^7 MAX487E RE 485串口通信
P3^0/RXD MAX487E RXD 485串口通信
P3^1/TXD MAX487E TXD 485串口通信
P3^2/INT0 PCF8583 INT
P3^3/INT1 --- --- ---
P3^4/T0 --- --- ---
P3^5/T1 --- --- ---
P3^6/WR I2C总线SCL 模拟I2C时钟控制位
P3^7/RD I2C总线SDA 模拟I2C数据传送位
1.I2C器件接线图
2.功能按键设置接线图
3.AD转换器件接线图
4.数码管显示驱动接线图
5.485串口接线电路
6.单片机复位与外部时钟电路
四、软件程序清单
1.延时程序:void delay(void);
2.启动I2C总线:void I_start(void);
3.停止I2C总线:void I_stop(void);
4.初始化I2C总线:void I_int(void);
5.提供时钟信号,并返回时钟为高电平时SDA的状态:bit I_clock(void);
6.向SDA发送一个字节,并检验应答信号:bit I_send(uchar I_data);
7.从SDA上读取8位数据信号,并作为一个数据信号返回:byte I_receive(void);
8.发送应答信号:void I_ack(void);
9.毫秒级延时程序:void delay_ms(int n);
10.向8583时钟芯片内指定地址写入数据,并检验应答信号,成功则返回TRUE,否则返回FAULSE:bit Write_8583(uchar Address,uchar data1);
11.从8583时钟芯片指定地址读出数据,如成功读取,则发送应答信号,并返回TRUE,否则返回FAULSE:uchar Read_8583(uchar Address);
12.初始化8583时钟芯片,预输入时间:void init_8583(void);
13.向7219指定地址写入数据:void Write_7219(uchar Address,uchar Data);
14.MAX7219初始化:void init_7219(void);
15.设置时间和监控值:void set(void);
16.向24c256写入器件地址和一个指定的字节地址:bit E_address(uchar Address1,uchar Address2);
17.从24c256内地址0开始读出BLOCKSIZE个字节的数据:bit E_read(void);
18.向24c256写入数据:bit E_write(uchar data1);
19.故障点产生故障时写入24c256:void failure(void);
20.将模拟量通过TLC1549转换成数字量:uint TLC1549(void);
21.初始化:void init(void);
22.接受主机指令:bit Recv_Data(uchar *type);
23.发送单字节数据:void Send(uchar m);
24.发送数据:void Send_Data(uchar type,uchar len,uchar *buf);
25.主函数:void main(void)。
五、主要子函数源程序
1.函数变量及端口定义
#define HIGH 1
#define LOW 0
#define TRUE 1
#define FAULSE 0
#define byte unsigned int
#define uchar unsigned char
#define uint unsigned int
#define WRITE 0xA0 //8583写
#define READ 0xA1 //8583读
#define WRITE1 0xA2 //7219写
#define READ1 0xA3 //7219读
#define BLOCKSIZE 700
#define ACTIVE 0x11 //4种帧的定义
#define GETDATA 0xaa
#define READY 0x33
#define SENDDATA 0x44
#define RECFRMMAXLEN 16 //接受帧的最大长度,超过此值认为帧超长错误
#define STATUSMAXLEN 700 //设备状态信息最大长度
extern xdata uchar StatusBuf[STATUSMAXLEN]; //设备状态信息缓冲区
extern xdata byte EEPROM[BLOCKSIZE];
extern xdata byte address1_256=0x00; //24c256的写入地址
extern xdata byte address2_256=0x00;
extern xdata uchar run=0; //run为设置状态
extern xdata uchar time; //从8583读取的时间值
bit key_flg=0; //key_flg=0无按键,key_flg=1有按键
bit transfer_flg=0; //transfer_flg=0无移位键按下,transfer_flg=1有移位键按下