|
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)
仿真图 实物图 颜色对比 输出波型
|