PIC16模拟串口以及采样正弦波
来源:互联网 发布:苹果教育软件 编辑:程序博客网 时间:2024/06/07 12:04
最近两周用了两个IC(PIC16系列与STM8S系列)做了个产品,首次接触,遇到些问题,总结如下:
1:PIC16模拟串口发送数据,一定要在中断服务函数中执行
static void interrupt SystemISR(void)
{
if(TMR0IE && TMR0IF) //32MHz 104us
{
if(txCount) //检测数据是否发送完毕
{
TXD=(txData&0x01); //输出数据
txData=(txData>>1); //移位数据
--txCount;
}
else //发送完毕后进行停止位发送
{
if(txFlag)
{
TXD=1;
txFlag=false;
}
else
{
TMR0IE=0; //发送完毕后关闭定时器中断
}
}
TMR0 = 0xcf; //初值
TMR0IF=0;
}
}
//模拟串口发送一个byte
void emulatedUardSendChar(unsigned char data)
{
while(TMR0IE);//等待上一次数据发送完毕
TXD=0; //发送起始位
TMR0 = 0xcf; //初始值
TMR0IF = 0; //清零定时器中断
TMR0IE = 1; //定时器0中断使能
txData = data; //转移数据到发送缓存
txCount = 8; //预置需要发送的位个数(8位数据)
txFlag = true; //数据发送完毕标志
}
2:ADC采样50HZ的正弦波
ADC时时采样,50HZ就是20ms一个周期,可以连续采样2个周期,40ms采样300次,找出其中最大值与最小值计算出有效值,这是不太精确的方式,暂时这样解决。
上述方法不是很精确,找到一种更精确的方法。
20ms一个周期内采样40个点,500us一次,对40个值平方求和再开方就能求出真实有效值,不只是对于正弦波,进而求出电压值。
3:STM8S FLASH大小只有8K,代码编译经常超出其大小。
其一:尽量少用库函数,直接写寄存器
其二:IAR都有其优化级别,选最高。
其三:代码尽量不要冗余。
- PIC16模拟串口以及采样正弦波
- pic16多路adc采样
- Vertex Shader - 正弦波模拟
- Arduino - 正弦波数值的采样与应用
- C++串口操作以及串口模拟测试
- 在SurfaceView中模拟正弦波
- 正弦波
- 正弦波
- C8051F020实现ADC采样芯片外的模拟电压,通过LCD显示,并通过串口发送到PC机
- 模拟串口
- 随机采样和随机模拟
- 随机模拟与采样方法
- 随机模拟和采样方法
- STC12C5201AD AD采样+串口发送模板
- 串口接收模块 5倍速率采样
- 随机采样和随机模拟:吉布斯采样Gibbs Sampling
- 模拟信号采样与AD转换
- 模拟信号采样与AD转换
- SurfaceView简单使用--可做帧动画
- 莫比乌斯反演
- C语言结构体的字节对齐原则
- 集合乱序方法
- 数组排序
- PIC16模拟串口以及采样正弦波
- C#泛型类访问子类成员
- css3-颜色背景盒模型
- L
- Static 关键字详解
- JAVA 基本功秘籍
- 【Angular】angular-HttpClient 与服务器通讯 Get Post Put Delete Http 拦截器 请求讲解
- [JSP]Servlet/与内置对象/3.0注解新特性/表单通过servlet提交案例
- 关于Druid执行connection.close(),connection不回收问题