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

上传人:b****0 文档编号:25899125 上传时间:2023-06-16 格式:DOCX 页数:7 大小:15.61KB
下载 相关 举报
单片机各个模块程序代码.docx_第1页
第1页 / 共7页
单片机各个模块程序代码.docx_第2页
第2页 / 共7页
单片机各个模块程序代码.docx_第3页
第3页 / 共7页
单片机各个模块程序代码.docx_第4页
第4页 / 共7页
单片机各个模块程序代码.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

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

《单片机各个模块程序代码.docx》由会员分享,可在线阅读,更多相关《单片机各个模块程序代码.docx(7页珍藏版)》请在冰豆网上搜索。

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

单片机各个模块程序代码

12C5A12C5A12C5A12C5A12C5A12C5A12M6M3M1.5M12C5A12C5A闲模式,低速模式

12C5A0f12C5A2A12C5A12C5A12C5A0c12C5A12C5A12C5A0L0L7f0a0L0L0L0L0L0L0L0L0L12C5A12C5A12C5A12C5A12C5A速.同步的通信总线,有两种操作模式:

主模式和从模式。

12C5A12C5A12C5A速.同步的通信总线,有两种操作模式:

主模式和从模式。

//

//涉及寄存器:

SPCTL(SPI控制寄存器)、SPSTAT(SPI状态寄存器)、SPDAT(数据寄存器)

//AUXR1(辅助寄存器)

////

//程序说明:

本程序为SPI的从机程序,从机通过SPI接收主机发送过来的数据,并通过串口

//显示到PC端,

//

//****************************************************************************//

#include<12C5A>

#include<>

#defineucharunsignedchar

#defineuintunsignedint

/************对SPCTL寄存器的设置位宏定义*************/

#defineSSIG0x80//SS引脚忽略

#defineSPEN0x40//SPI使能位

#defineDORD0x20//SPI数据发送LSB最先发送

#defineMSTR0x10//主从模式选择

#defineCPOL0x08//SPICLK空闲时为高电平

#defineCPHA0x04//数据在SPICLK的前时钟沿驱动,并在后时钟沿采样

#defineSP_CLK00x00//SPI时钟频率为CPU_CLK/4

#defineSP_CLK10x01//SPI时钟频率为CPU_CLK/16

#defineSP_CLK20x02//SPI时钟频率为CPU_CLK/64

#defineSP_CLK30x03//SPI时钟频率为CPU_CLK/128

/************对SPSTAT寄存器的设置位宏定义************/

#defineSPIF0x80//传输完成标志

#defineWCOL0x40//SPI写冲突标志

/************SPI口切换宏定义***************/

#defineSPI_P40x20//SPI从P1口切换到P4口

/************波特率选择********************/

#defineBTL9600//若要更改波特率直接更改此处,当波特率大于9600时需修改相应的接收程序,

//可选波特率有以下:

否则有可能出现乱码

//波特率为2400//波特率为28800

//波特率为4800//波特率为38400

//波特率为9600//波特率为57600

//波特率为14400//波特率为115200

//波特率为19200

voidUART_init(void);

ucharReceive(void);

voidPrintf(uchar*p);

voidInit_SPI(void);

voidSend_byte(ucharbyte);

//****************************************//

//串口初始化//

//****************************************//

voidUART_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;//开总中断

}

//************************************************//

//发送一个字节数据//

//************************************************//

voidSend_byte(ucharbyte)

{

SBUF=byte;

while(!

TI);

TI=0;

}

//************************************************//

//打印字符//

//************************************************//

voidPrintf(uchar*p)

{

while(*p!

='\0')

{

Send_byte(*p);

p++;

}

}

//************************************************//

//接收函数//

//************************************************//

ucharReceive(void)

{

ucharbyte;

_nop_();

_nop_();

_nop_();

_nop_();

if(RI==1)

{

RI=0;

byte=SBUF;

}

returnbyte;

}

//***********************************//

//*名称:

Init_SPI()

//*功能:

对SPI进行初始化

//*输入:

//*输出:

//***********************************//

voidInit_SPI(void)

{

SPDAT=0;//清空数据寄存器

SPSTAT=SPIF|WCOL;//清空SPI状态寄存器

SPCTL=SPEN;//SPI设置为从机模式

IE2=0x02;//允许SPI中断

}

//***********************************//

//*名称:

main

//*功能:

//*输入:

//*输出:

//***********************************//

voidmain()

{

ucharflag=0;

UART_init();

Init_SPI();

EA=1;//开总中断

while

(1)

{

flag=Receive();

if(flag)//当PC端有给从机发送数据时把从机当前的SPDAT值发送出来

{

Send_byte(SPDAT);

flag=0;

}

}

}

//***********************************//

//*名称:

SPI_ISR()

//*功能:

SPI中断服务

//*输入:

//*输出:

//***********************************//

voidSPI_ISR(void)interrupt9using1//使用工作寄存器组1

{

SPSTAT=SPIF|WCOL;//清标志

Printf("Receive_Data:

");

P2=P2+1;//LED灯表示接收的次数

Send_byte(SPDAT);//读出主机发送过来的数据

SPDAT=SPDAT;//把上一次接收到的值传回主机

Send_byte('\t');

}

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

当前位置:首页 > 人文社科 > 教育学心理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1