C8051F330基本外设调试

2019-04-14 18:07发布

项目需要用到该系列单片机,根据用户手册,对其外设驱动进行编写。

1.串口配置

这里我使用的波特率是19200,使用内部晶振,波特率调节方法可参照用手册
配置代码如下 void uart_init() { SCON0=0x10;//8位可编程波特率 允许接收 TMOD=0x21;//配置定时器1八位自动重装 CKCON=0x01;//定时器0,1为系统时钟的4分频 确定时钟频率为5M TH1=0x81;// TL1=0x81; TR1=1; ES0=1;//允许串口中断 EA=1; }为方便使用,提供一个打印函数 /***************串口打印函数************/ void sendstring(uchar *date,uchar lenth) { uchar i; for(i=0;i参数为一个uchar指针指向一个数据数组以及数组长度值
接收数据,使用帧尾校验方式,连续的0x0a,0x0d作为结束标志,实现方法如下 void RS_int() interrupt 4//串口中断 { uchar date; static uchar dic=0; static uchar num=0; if(RI0==1) { RI0=0; date=SBUF0;//获取数据 RecBuf[num]=date; num++; lenth++; if(dic==1)//改进之后确认换行符才会将recover置1 { if(date==0x0d) { dic=0; recover=1; num=0; } else dic=0; } if(date==0x0a) { dic=1; } } } 当数据接收完成recover会被置1,数据长度保存在lenth变量中


2.外部中断

外部中断0,1可以通过IT01CF寄存器配置触发方式以及监视的IO口,在交叉开关中跳过使用到的IO口 void NVIC_init() { EX0=1;//允许外部中 EX1=1; IT01CF=0x98;//高电平触发且分配IO口 IT0=1;//选择为边沿触发 IT1=1; }

3.Flash读写操作

这里重点在于对FLKEY 的写入,一旦写入错误就会锁死Flash。 Flash读取操作代码: uchar Flash_Read(unsigned int addr) { uchar code*ptr; EA=0; ptr=addr; EA=1; return *ptr; }因为当Flash修改关闭xdata将指向xram所以这里要用code访问code区
Flash修改操作:官方手册给出的操作步骤
对应的修改代码如下: void Flash_Write(uint addr,uchar lenth,uchar*arry)//值得注意 FLKEY写入顺序一定要正确 否则会锁死Flash { uchar xdata*ptr; uchar i; EA=0; FLSCL=0x10; PSCTL=0X03;//允许写/擦除操作 FLKEY=0xA5; FLKEY=0xF1; ptr=addr; for(i=0;i

4.定时器的配置与操作

这里示范的是生成105HZ的方波 配置程序为: void timerset()//产生方波 { /*********105HZ配置********/ //TH0=(65535-22250)/256; //TL0=(65535-22250)%256; /*********210HZ配置********/ TH0=(65535-11125)/256; TL0=(65535-11125)%256; ET0=1;//打开定时器0中断 TR0=1; }
采用16位计数器,根据之前的配置这里计时器使用的是5M时钟频率 中断程序为: void timer0() interrupt 1//产生方波的中断 { PLUS=!PLUS; TH0=(65535-11125)/256; TL0=(65535-11125)%256; }