没有合适的资源?快使用搜索试试~ 我知道了~
经典stm8s20实用c语言编程大全.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 199 浏览量
2021-12-22
08:46:13
上传
评论
收藏 564KB DOC 举报
温馨提示
试读
72页
经典stm8s20实用c语言编程大全.doc
资源推荐
资源详情
资源评论
*站上整理的免费分享我学单片机开门三砖老是 要砸的.
第一砖: 电源系统, 这没什么好说的, 只是 它是 stm8工作的根本老是 要提一下
第二砖: 时钟系统, 这等下再说.
第三砖: 复位系统, stm8只需要一只104电容从reset脚到地就可以了.
此刻说说时钟系统, 学习单片机无论8位的仍是 32位的, 都要从时钟最先, 下面是
我一最先的时钟切换程序.
2
3
4CLK_ECKR|=0X1;开启外部时钟while(!(CLK_ECKR&0X2));等待外部时钟rdyCLK_CKD
IVR&=0XF8;CLK_SWR=0XB4;CPU无分频挑选外部时钟
5CLK_SWCR|=0X2;
CLK_ECKR|=0X1;使能外部时钟开启外部时钟
while(!(CLK_ECKR&0X2));等待外部时钟rdy
CLK_CKDIVR&=0XF8;
CLK_SWR=0XB4;CPU无分频挑选外部时钟
while(!(CLK_SWCR&0X8));这里要等
CLK_SWCR|=0X2;使能外部时钟
死. 它可以有中断的, 在中断中处理统统, 包罗恢复时钟源, 这才是 正道, 只是 我对照懒,
不是 做正规产物, 想都不愿去想.
长长的一篇, 没什么内容, 请包涵我的唠叨吧.
*站上整理的免费分享又想起一句, 卖力看手册里的时钟概略图吧, 这对你有扶助.
第二节: 傻的可爱—cosmic和time的事情
使用单片机守时器老是 用到的, 无论是 延时, 键盘扫描, 表现刷新, 仍是
巨无霸的操纵系统. Time1太过复杂等过些天再说, 我是 从time2最先的,
从简单的守时最先吧.
简单的说明一下, time2是 向上计数的, 不像time1可以双向计数(这对我很有效,
我可以使用它的正交编码功能, 这正是 我学stm8的初衷,
它可以让我省下一片正交计数器或是 一片cpld, 等过两天从公司借个编码器, 调试一下),
我们怎么可以达到守时1ms的目的哪?
关键是 TIM2_ARR这个寄存器, TIM2_CNTR是 计数到TIM2_ARR就产生更新事务,
然后清零从头最先的, 看下面的代码.
1CLK_PCKENR1|=0X20;开启时钟, stm8的外设时钟可控
2TIM2_PSCR|=0X3;DIV8
为1us1US->外部晶振8mhz除以8实现单位时间
3TIM2_IER|=0X1;许可中断
4TIM2_ARR=0X3E7;
5TIM2_CR1|=0X1;关键是 这里开启守时器
这看起来没错, 可就是 不能实现守时结果, 这是 为什么?答案出乎我的意料,
看汇编代码后才发觉, comsic使用了ldw指令, 而ldw指令是 先写低位再写高位的.
ARR寄存器是 要求先写高位再写低位的, 将第4行改为
TIM2_ARRH=0X3;
TIM2_ARRL=0XE7;
后, 问题解决. 用avr时gcc编译器都给做好了, comsic很傻很强盛. 记住这个教训吧,
要看编译器手册, 不要偷懒, 多写一行就多写一行吧. 中断部分以后再说. 就到这里,
明天再聊, 这耽误我看小说的时间了, 哎, 为了stm8我已经
*站上整理的免费分享4晚上没看小说了.
第三节: ad的单次转换
说起ad我是 就头大, 不是 说stm8的ad让我头大, 而是 从前在产物中使用的ad
老板老是 要求越来越高, 从16bit到24bit, 从逐渐逼近到sigma,
在电路上战胜小信号的收罗其实是 一件痛苦的事情,
至今在24bit的收罗上只能到18bit有效位, 有履历的朋侪必然要报告我.
又扯远了, stm8只是 10bit的ad, 任意用用就可以了, 我从来没指望它能给我出大力气,
当然大大们做民品, 或是 别的要求不高的可以用用.
为什么说单次转换呢?因为简单, 因为我懒. 看下面的代码吧
这里是 初始化
CLK_PCKENR2|=0X8;使能adc时钟
ADC_CSR|=0X3;挑选通道3克制中断
使能ADC, 18分频
数据右对齐, low8BITATADC_DRL;ADC_CR1|=0X71;ADC_CR2|=0X8;
这里是 转换成果
unsignedintx;
unsignedintx_h;
ADC_CR1|=0X1;启动转换
14个时钟周期while(!(ADC_CSR&0x80));等待转换结束
ADC_CSR&=0X7F;
x=ADC_DRL;
x_h=ADC_DRH;
x_h=(x_h<<8)+x;排除中断标记READDATA因为是 右对齐所以先读低位
*站上整理的免费分享returnx_h;
此次没出什么错, 各人失望了吧!哈哈, 说点题外话, 做16bit以上ad我认为要注重几点
1.有一个好的基准
2.传感器供电最好和基准联动
3.要有效去除长线干扰, 如加屏蔽*, 做线阻均衡.
4.使上两个好的电阻吧, 会省很大力气
5.布线要花大力气, 不能瞎布.
其它的还有无数, 大大们到*上看吧, 前人栽树, 后人乘凉. 我们即要做前人, 也要做后人.
第四节: 中断系统和一杯热茶
近来喜爱喝茶, 筹办去买一套茶具, 一个小壶, 八个小杯那种. 我喜爱铁观音, 浓浓的,
滚烫的, 直入喉咙.
中断就像一杯浓浓的铁观音, 没有操纵系统的时辰, 使用中断吧, 一样可以达到实时响应.
没有极品龙井, 就喝铁观音吧, 一样口齿留香.
Stm8的中断是 有优先级的, 不是 avr那种假优先级, 是 那种低级中断正在处理,
高级中断可以终止它的优先级.
我们不说这些, 它在不做项目时, 离我还很遥远.
说说comsic的开中断手段吧看下面的语句
_asm("sim");这是 关中断
剩余71页未读,继续阅读
资源评论
cdbycd
- 粉丝: 26
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功