C8051F330基本外设调试
来源:互联网 发布:人工智能四大平台 编辑:程序博客网 时间:2024/05/16 10:01
项目需要用到该系列单片机,根据用户手册,对其外设驱动进行编写。
1.串口配置
这里我使用的波特率是19200,使用内部晶振,波特率调节方法可参照用手册
配置代码如下
void uart_init(){SCON0=0x10;//8位可编程波特率 允许接收TMOD=0x21;//配置定时器1八位自动重装CKCON=0x01;//定时器0,1为系统时钟的4分频 确定时钟频率为5MTH1=0x81;//TL1=0x81;TR1=1;ES0=1;//允许串口中断EA=1;}为方便使用,提供一个打印函数
/***************串口打印函数************/void sendstring(uchar *date,uchar lenth){uchar i;for(i=0;i<lenth;i++){SBUF0=date[i];while(!TI0);//等待发送完成TI0=0;}}参数为一个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<lenth;i++)//擦除数据{*(ptr+i)=0xf;FLKEY=0xA5;FLKEY=0xF1;}PSCTL=0x01;//不允许擦除for(i=0;i<lenth;i++){*(ptr+i)=*(arry+i);FLKEY=0xA5;FLKEY=0xF1;}PSCTL=0X00;EA=1;}
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;}
阅读全文
1 0
- C8051F330基本外设调试
- C8051F236基本外设配置
- c8051f330电路设计
- 嵌入式开发调试外设的心得
- 高通外设驱动调试集粹
- android驱动一些外设调试记录
- android驱动一些外设调试记录
- android驱动一些外设调试记录
- C8051F330 Flash访问单元
- 单片机基本的外设通信接口
- 移动平台驱动调试流程(二)--外设调试阶段
- 移动平台驱动调试流程(二)--外设调试阶段
- 半年之内要学会的10大外设调试
- LPC1768 SPI 外设控制DA(PCM1796)调试记录
- windbg调试-----基本调试方法
- 解决安卓手机USB接口被外设占用导致无法调试的问题
- windbg调试---基本命令
- gdb基本调试
- Numpy文件存取
- iOS-在现有项目中添加React Native(手动RNDemo)
- 我和你
- Mac电脑传输文件慢的原因
- 其实就是测试一下,第一个博客
- C8051F330基本外设调试
- HDU6055空间内n个点能组成多少个正方形
- 杭电acm 1159Common Subsequence(字符串处理+dp)
- struts2.3升级到struts2.5.10.1步骤及遇到的问题
- A+B Problem(V)
- Mysql主从配置(超简单的)
- Laravel ORM操作
- http协议
- curl网站开发指南