http://shop66732237.taobao.com/ http://armlinux.taobao.com
QQ空间的老文章转到这里。
//***********************dami 2006,9,6************************
//这里实现: 9位异步,可变波特率 (其他就不搞了)
//825a串口通信,有关的寄存器有:P5CONH,UARTCON,INTPND,BRDATA,UDATA ,还有关连
//波特率的寄存器(CLKCON,要有FXX的值tt).
//825a串口通信模式有四种:
//同步:一个时钟,一个数据
//8位异步 可变波特率
//9位异步 FXX/16
//9位异步 可变波特率
//825a校验和,发送TB8,接收RB8,用户计算校验和,处理校验和.
//如果用户不用校验,TB8,RB8可以作为一般的数据位传送.
//多机通信:有专用多机通信位
#include<ioS3C825A.H>
#include<INTRINSICS.H>
#define uchar unsigned char
#define uint unsigned int
#definetestbit(var,bit)((var)&(1<<(bit)))//位测试
#definesetbit(var,bit)((var)|=(1<<(bit)))//位置1
#defineclrbit(var,bit)((var)&=~(1<<(bit)))//位清零 clrbit(p3,1);就是了
void delay();
unsigned int i;
void main()
{
BTCON = 0xa2;
CLKCON = 0x98;//时钟控制器不分频
OSCCON = 0x0;//主从晶体及运行/停止
IMR = 0X8;
WTCON = 0x0;
P5CONH = 0x8c;//P3CONL.7~5:011,P3CONL.4~2=001
BRDATA = 0x19;//4M 晶体频率不分频. 波特率9600
UARTCON = 0xd2;//模式:11,MCE:0,TB8,RB8:00,RIE:接收中断允许,TIE发送中断不允许
//__disable_interrupt();
__enable_interrupt();
//while(1)
//{
UDATA = 0x55; //发送数据就直接写UART就行
delay();
UDATA = 0x33; //发送数据,注意延时要够啊.用中断方式也行.我嫌麻烦就不搞了
delay();
//}
__enable_interrupt();
while(1)
{
__no_operation();
__no_operation();
}
}
// if(testbit(P0,3)==1)
// {
// setbit(P3,1);
// //delay();
// clrbit(P3,1);
// while(!testbit(P0,3));
// }
// while(1);
//}
void delay()
{
unsigned int i;
for (i=1000;i>0;i--);
}
#pragma vector=__UART_RX_vector
__interrupt void UART_RX_interrupt( void )
{
unsigned char rxdatabuf;
rxdatabuf = UDATA;
rxdatabuf++;
UDATA = rxdatabuf;
delay();
INTPND = 0x0;
}