10F200资源:
一个8位timer,一个WDT
可以工作在 2.0~5.5V
内置晶振,单一频率4MHz 精度1%
三个IO,一个Input
指令空间: 255
目标:
使用串口通讯方式,波特率38400,8位数据,1位停止,无奇偶校验 (38400,N,8,1)
GPIO0,1,2 RGB PWM输出
GPIO3 USART 输入
连接方式:
所有10F200的GPIO3都连在一起,用每个芯片自定义的ID值来决定收受还是忽略此次数据
数据格式:
ID, R, G, B
占用时间 (1+8+1)*4 = 40 40*1000,000/38400 = 1041.67 us
1秒钟可控制次数 1000,000 / 1041 = 960
问题:
1.在接收串口数据的同时,刷新IO
2.区分开数据与ID
数据格式 ID, r, g ,b
ID最高位必须为1,r,g,b最高位必须为0,这样可以区分开数据与ID,实际可调的亮度只有7位精度
PWM频率由timer0的分频比决定,理论上可达到1MHz/2/256 = 1.9K, 由于IO平均19.5条指令刷一次,因此精度只有20/2/128*100% = -8.0% ~ +8.0%,刷IO的指令不是均匀分布的,误差还会再大一些
PWM精度由xCnt与tmr0的比较频率决定。比较越频繁,精度越高
读ID方法,启动时将GPIO3接地,ID从GPIO0发出,格式(38400,N,8,1)
源代码下载 attachment download
源代码包含:
.\MPLAB MPLAB ASM汇编源代码 (MPLAB 8.00)
.\Proteus Proteus仿真文件 (Proteus 6.9)
.\CPP 上位机CPP代码 (VS2005)
.\LinkVSP VSPM虚拟串口互连的配置文件 (VSPM 2.5)
仿真图
实物图
颜色对比
输出波型
用户501716 2015-12-19 10:46
用户559562 2014-5-15 13:20
1563661808_715097223 2014-3-24 16:36
用户447623 2013-8-14 23:55