S单片机各个模块程序代码.doc

上传人:scccc 文档编号:13985020 上传时间:2022-01-29 格式:DOC 页数:8 大小:96KB
返回 下载 相关 举报
S单片机各个模块程序代码.doc_第1页
第1页 / 共8页
S单片机各个模块程序代码.doc_第2页
第2页 / 共8页
S单片机各个模块程序代码.doc_第3页
第3页 / 共8页
亲,该文档总共8页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《S单片机各个模块程序代码.doc》由会员分享,可在线阅读,更多相关《S单片机各个模块程序代码.doc(8页珍藏版)》请在三一文库上搜索。

1、12C5A12C5A12C5A12C5A12C5A12C5A12M6M3M1.5M12C5A120闲模式,低速模式12C5A0f12C5A2A12C5A12C5A12C5A0c12C5A12C5A12C5A0L0L7f0a0L0L0L0L0L0L0L0L0L12C5A12C5A12C5A12C5A12C5速.同步的通信总线,有两种操作模式:主模式和从模式12C5A12C5A12C5A 速.同步的通信总线,有两种操作模式:主模式和从模式/涉及寄存器:SPCTL( SPI控制寄存器)、SPSTAT ( SPI状态寄存器)、SPDAT数据寄存器)/AUXR1(辅助寄存器)/程序说明:本程序为SPI的

2、从机程序,从机通过SPI接收主机发送过来的数据,并通过串口/显示到PC端,/*#in elude #inelude #define uchar unsigned char #define uint unsigned int*对SPCTL寄存器的设置位宏定义波特率选择*/ #define BTL 9600 /若要更改波特率直接更改此处,当波特率大于9600时需修改相应的接收程序/可选*波特率有以下否则有可能出现乱码*#defi ne SSIG0x80 /SS引脚忽略#defi ne SPEN0x40 /SPI使能位#defi ne DORD0x20 /SPI数据发送LSB最先发送#defi ne

3、 MSTR0x10 /#defi ne CPOL0x08 /SPICLK#defi ne CPHA数据在SPICLK的前时钟沿驱动,/SPI时钟频率为CPU_CLK/4/SPI时钟频率为CPU_CLK/16/SPI时钟频率为CPU_CLK/64/SPI时钟频率为CPU CLK/128主从模式选择空闲时为高电平0x04 /#define SP CLK0 0x00#define SP CLK1 0x01#define SP CLK2 0x02#define SP CLK3 0x03对SPSTAT寄存器的设置位宏定义*传输完成标志并在后时钟沿采样*#defi ne SPIF 0x80 /#defi

4、ne WCOL0x40 /SPI写冲突标志* *SPI*从P1 口切换到P4 口波特率为2400/波特率为28800波特率为4800/波特率为38400波特率为9600/波特率为57600波特率为14400/波特率为115200波特率为19200口切换宏定义#define SPI P40x20 /SPI/void UART_i nit(void); uchar Receive(void); void Printf( uchar *p );void Ini t_SPI(void);void Sen d_byte( uchar byte );ye*/串口初始化/*/* */void UART_i

5、ni t(void)/ SMO = 0; / SM1 = 1; /8/ REN = 1; /SCON = 0x50;#if( BTL = 2400 )BRT = 0x70; /#elif( BTL = 4800 )BRT = 0xB8;选择串口为方式1工作位数据波特率可变允许串口接收波特率设置为9600#elif( BTL = 9600 )BRT = 0xDC;#elif( BTL = 14400 )BRT = 0xE8;#elif( BTL = 19200 )BRT = 0xEE;#elif( BTL = 28800 )BRT = 0xF4;#elif( BTL = 38400 )BRT =

6、 0xF7;#elif( BTL = 57600 )BRT = 0xFA;#elif( BTL = 115200 )BRT = 0xFD;#en difAUXR = 0x15; / ES = 1; /选择独立波特率发生器为串行 口的波特率发生器,模式为1T允许串口中断/ IPH = 0X10; /PSH = 1;/ IP = 0X10; /PS = 1;/ EA = 1; /开总中断” ” */*串口 1中断为最咼优先级中断*/发送一个字节数据/*/* */void Sen d_byte( uchar byte )SBUF = byte; while(!TI);TI = 0;/ye*/打印字符

7、/void Printf( uchar *p )while( *p != 0)Sen d_byte(*p);p+; */接收函数/* uchar Receive( void )uchar byte;_nop_();_nop_();_nop_();_nop_();if( RI = 1 )RI = 0;byte = SBUF;return byte;/*名称:Ini t_SPI()/*功能:对SPI进行初始化/*输入: /*输出:/* void Ini t_SPI(void)SPDAT = 0;/清空数据寄存器清空SPSTAT = SPIF|WCOL; /SPI状态寄存器SPCTL 二SPEN;

8、/SPI IE2 =设置为从机模式允许SPI中断0x02; /*/*名称:mai n/*功能:/*输入:无/*输出:无/*void mai n()uchar flag = 0;UART_init();Init_SPI();EA = 1; / 开总中断 while(1)当 PC 端有给从机发送数据时把从机当前的SPDAT 值发送岀来flag = Receive(); if(flag) /Send_byte(SPDAT); flag = 0; /*/* 名称: SPI_ISR()/* 功能 : SPI 中断服务/* 输入:无/* 输出:无*/ voidSPI_ISR(void) interrupt 9 using 1 SPSTAT = SPIF|WCOL; / Printf(Receive_Data:); P2 = P2+1; /LED Send_byte(SPDAT); / SPDAT = SPDAT; / Send_byte(t);灯表示接收的次数 读出主机发送过来的数据 把上一次接收到的值传回主机/ 使用工作寄存器组 1清标志

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1