STC12C5A60S2单片机各个模块程序代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
12C5A12C5A12C5A12C5A12C5A12C5A12M6M3M1.5M12C5A12C5A闲模式,低速模式
12C5A0f12C5A2
A12C5A12C5A12C5A0c12C5A12C5A12C5A0L0L7f0a0L0L0L0L0L0L0L0L0L12C5A12C5A12C5A12C5 A12C5A速.同步的通信总线,有两种操作模式:主模式和从模式。
12C5A12C5A12C5A速.同步的通信总线,有两种操作模式:主模式和从模式。
//
// 涉及寄存器:SPCTL(SPI控制寄存器)、SPSTAT(SPI状态寄存器)、SPDAT(数据寄存器)
// AUXR1(辅助寄存器)
// //
// 程序说明:本程序为SPI的从机程序,从机通过SPI接收主机发送过来的数据,并通过串口
// 显示到PC端,
//
//**************************************************************************** //
#include <12C5A>
#include <>
#define uchar unsigned char
#define uint unsigned int
/************对SPCTL寄存器的设置位宏定义*************/
#define SSIG 0x80 //SS引脚忽略
#define SPEN 0x40 //SPI使能位
#define DORD 0x20 //SPI数据发送LSB最先发送
#define MSTR 0x10 //主从模式选择
#define CPOL 0x08 //SPICLK空闲时为高电平
#define CPHA 0x04 //数据在SPICLK的前时钟沿驱动,并在后时钟沿采样
#define SP_CLK0 0x00 //SPI时钟频率为CPU_CLK/4
#define SP_CLK1 0x01 //SPI时钟频率为CPU_CLK/16
#define SP_CLK2 0x02 //SPI时钟频率为CPU_CLK/64
#define SP_CLK3 0x03 //SPI时钟频率为CPU_CLK/128
/************对SPSTAT寄存器的设置位宏定义************/
#define SPIF 0x80 //传输完成标志
#define WCOL 0x40 //SPI写冲突标志
/************SPI口切换宏定义***************/
#define SPI_P4 0x20 //SPI从P1口切换到P4口
/************波特率选择********************/
#define BTL 9600 //若要更改波特率直接更改此处,当波特率大于9600时需修改相应的接收程序,
//可选波特率有以下: 否则有可能出现乱码
//波特率为2400 //波特率为28800
//波特率为4800 //波特率为38400
//波特率为9600 //波特率为57600
//波特率为14400 //波特率为115200
//波特率为19200
void UART_init(void);
uchar Receive(void);
void Printf( uchar *p );
void Init_SPI(void);
void Send_byte( uchar byte );
//****************************************//
// 串口初始化 // //****************************************//
void UART_init(void)
{
// SM0 = 0; //选择串口为方式1工作
// SM1 = 1; //8位数据波特率可变
// REN = 1; //允许串口接收
SCON = 0x50;
#if( BTL == 2400 )
BRT = 0x70; //波特率设置为9600
#elif( BTL == 4800 )
BRT = 0xB8;
#elif( BTL == 9600 )
BRT = 0xDC;
#elif( BTL == 14400 )
BRT = 0xE8;
#elif( BTL == 19200 )
BRT = 0xEE;
#elif( BTL == 28800 )
BRT = 0xF4;
#elif( BTL == 38400 )
BRT = 0xF7;
#elif( BTL == 57600 )
BRT = 0xFA;
#elif( BTL == 115200 )
BRT = 0xFD;
#endif
AUXR = 0x15; //选择独立波特率发生器为串行
//口的波特率发生器,模式为1T
// ES = 1; //允许串口中断
// IPH = 0X10; //PSH = 1;
// IP = 0X10; //PS = 1;串口1中断为最高优先级中断
// EA = 1; //开总中断
}
//************************************************//
// 发送一个字节数据 //