MCS-51微机接口大作业

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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有移位键按下

相关文档
最新文档