波形控制
设备间 通讯实现
• 串行通讯
单线
双线 uart (全双工 异步)
双线 i2c (半双工 同步)
三线 spi (全双工 同步)
• 并行通讯
多根数据线 地址线,如内存
串口 UART 协议
uart 串口波形
发送 0xFF 0X00 0X04 0X08数据
串行通信参数设置:BAUD:115200,8位数据,1个停止位,无奇偶校验,发送顺序为低位先发送。
波形实现方法:
1. CPU 已实现,仅需设置寄存器
2. GPIO管脚模拟波形
I2C 设备
• 双线 i2c (半双工 同步)
• 支持一主机对多从机
• 可主从切换
双线 i2c (半双工 同步)
往ID为0x3c的I2C 设备写数据 0x2e 0x2e ...
1.由主机发起,在SCL为高电平时,SDA由高到低切 变,形成开始信号;
2.接着是7位地址和一位读写标志,这里7位地址为0111100,即0x3c,正是我们代码中设置的地址ID;最后一位为0表示写操作;
3.接着在下一个时钟,主机以高电平状态释放SDA,这时从机响应,将SDA拉低了;
4.接着是两个8位数据00101110与响应,即0x2E,
5.还有其它数据和最后的停止位,图中被截掉了
PWM 蜂鸣器
PWM(Pulse Width Modulation) :
脉冲宽度调制 。常见应用有:电机控制,DAC输出等
占空比:
就是输出的PWM中,高电平保持的时间 与该PWM的时钟周期的时间之比
WDT 看门狗
工作原理:在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位
PWM 控制框图
PWM 控制程序
void PWM_init(void)
{
GPD0.CON = (GPD0.CON & ~(0xf)) | 0x2; // GPD0_0 : TOUT_0
PWM.TCFG0 = (PWM.TCFG0 & ~(0xFF)) |0x63; //Prescaler 0 value for timer 0; 99 + 1 = 100
PWM.TCFG1 = (PWM.TCFG1 & ~(0xF)) | 0x3; // 1/8 input for PWM timer 0
PWM.TCNTB0 = 200; //设置脉冲周期数 200 TOUT PWM输出频率 = TLK/周期数
PWM.TCMPB0 = 100; //设置占空比 TCMPB0/TCNTB0 =100/200=1/2
/* auto-reload, Inverter Off, manual update */
PWM.TCON = (PWM.TCON & ~(0XF)) | 0XA;
/* auto-reload, Inverter Off, manual update off, start Timer0*/
PWM.TCON = (PWM.TCON & ~(0xF)) | 0X9;
}