资料介绍
现在几乎所有的单片机都能用 C 语言编程了,采用 C 语言编程确实能带来很多好处,至少可读性比汇编语言强多了。在 STM8 的开发环境中,可以通过新建一个工程,自动地建立起一个 C 语言的框架,生成后开发环境会自动生成 2 个 C 语言的程序,一个是 main.c ,另一个是 stm8_interrupt_vector.c 。main.c 中就是一个空的 main() 函数,如下所示:
在 stm8_interrupt_vector.c 中,除了定义了中断向量表外, 还定义了空的中断服务程序, 用于那些不用的中断。当然在自动建立时,所有的中断服务都是空的,因此,除了第 1 个复位的向量外,其它都指向那个空的中断服务函数。生成框架后,就可以用 Build 菜单下的 Rebuild All 对项目进行编译和连接,生成所需的目标文件,然后就可以加载到 STM8 的芯片中,这里由于 main() 函数是一个空函数,因此没有任何实际的功能。不过我们可以把这个框架对应的汇编代码反出来,看看 C 语言生成的代码,这样可以更深入地了解 C 语言编程的特点。
图 1 显示的是从内存地址 8000H 开始的中断向量表,中断向量表中的第 1 行 82008083H 为复位后单片机运行的第 1 跳指令的地址。从表中可以看出,单片机复位后,将从 8083H 开始运行。其它行的中断向量都指向同一个位置的中断服务程序 80D0H 。图 2 显示的是 3 个字节, 前 2 个字节 8083H 为复位后的第 1 条指令的地址, 第 3 个字节是一个常量 0,后面的启动代码要用到。图 3 显示的是启动代码,启动代码中除了初始化堆栈指针外,就是初始化 RAM 单元。由于目前是一个空的框架,因此在初始化完堆栈指针(设置成 0FFFH )后,由于 8082H 单元的内容为 0,因此程序就跳到了 80B1H ,此处是一个循环,将 RAM 单元从 0 到 5 初始化成 0。然后由于寄存器 X 设置成 01 00H ,就直接通过 CALL main 进入 C 的 main() 函数。图 4 显示的是 main() 函数和中断服务函数, main() 函数对应的代码就是一个无限的循环, 而中断服务函数就一条指令,即中断返回指令。通过分析,可以看出用 C 语言编程时,比汇编语言编程时,就是多出了一段启动代码。
STM8 单片机的时钟源非常丰富,芯片内部既有 16MHZ 的高速 RC 振荡器,也有 128KHZ 的低速 RC 振荡器,外部还可以接一个高速的晶体振荡器。在系统运行过程中,可以根据需要,自由地切换。单片机复位后,首先采用的是内部的高速 RC 振荡器,且分频系数为 8,因此 CPU 的上电运行的时钟频率为 2MHZ 。切换时钟源,主要涉及到的寄存器有:主时钟切换寄存器 CLK_SWR 和切换控制寄存器 CLK_SWCR 。主时钟切换寄存器的复位值为 0xe1 ,表示切换到内部的高速 RC 振荡器上。当往该寄存器写入 0xb4 时,表示切换到外部的高速晶体振荡器上。在实际切换过程中,应该先将切换控制寄存器中的 SWEN (第 1 位)设置成 1,然后设置 CLK_SWC R 的值,最后要判断切换控制寄存器中的 SWIF 标志是否切换成功。下面的实验程序首先将主时钟源切换到外部的晶体振荡器上, 振荡频率为 8MHZ ,然后, 然后快速闪烁 LED 指示灯。接着,将主时钟源又切换到内部的振荡器上,振荡频率为 2MHZ ,然后再慢速闪烁 LED 指示灯。通过观察 LED 指示灯的闪烁频率,可以看到,同样的循环代码,由于主时钟源的改变的改变,闪烁频率和时间长短都发生了变化。
- 在STVDCOSMIC在RAM中运行代码stm8 ram中运行程序
- STM8 CPU编程手册英文版下载 0次下载
- STM8在IAP中使用用户引导加载程序AN2659 3次下载
- STM8单片机的C语言例程合集免费下载 101次下载
- STM8 C语言精品编程100例PDF版电子书免费下载 0次下载
- STM8的C语言编程1-14讲完整版 0次下载
- Uart风驰STM8开发板程序源代码 3次下载
- Beep 风驰STM8开发板程序源代码 0次下载
- PWM 风驰STM8开发板程序源代码 3次下载
- TIM2 风驰STM8开发板程序源代码 3次下载
- TIM3 风驰STM8开发板程序源代码 3次下载
- 3-Key_Scan 风驰STM8开发板程序源代码 例9 14次下载
- Key_Exti 风驰STM8开发板程序源代码例9 2次下载
- STM8的C语言编程说明 37次下载
- MSP430 C语言编程的程序堆栈溢出分析
- 技术干货驿站 ▏深入理解C语言:掌握程序结构知识 833次阅读
- PLC编程语言和C语言的区别 1469次阅读
- plc编程语言与c语言的联系 c语言和PLC有什么区别 3041次阅读
- 单片机C语言编程的H文件与C文件到底有什么关系 2723次阅读
- C语言的源代码文件和目标文件与可执行文件的详细介绍 8302次阅读
- 使用C语言进行单片机编程的基本知识点和编程规范资料总结 4900次阅读
- 程序员学习Julia编程语言的五个理由 3859次阅读
- STM8单片机rtc时钟代码分享 3994次阅读
- C语言程序内存布局该关注哪些内容 878次阅读
- 学习开发环境和编程语言:汇编语言和C语言的比较 8893次阅读
- C语言作为高级编程语言中的一门“低级”语言为什么要学习? 8014次阅读
- plc与C语言有什么关系_plc可以用c语言编程吗_plc的C语言编程详解 7.2w次阅读
- stm8 halt低功耗模式 9419次阅读
- arduino用什么语言编程 6.9w次阅读
- 快速傅里叶变换FFT的C程序代码实现 6w次阅读
下载排行
本周
- 1基于Xilinx ZYNQ7000 FPGA嵌入式开发实战指南
- 20.20 MB | 2次下载 | 免费
- 2bq25890、bq25892双级联充电器EVM(PWR692)用户指南
- 2.02MB | 1次下载 | 免费
- 3ADC模数转换实验
- 0.09 MB | 1次下载 | 5 积分
- 4MSP430FR4133 LaunchPad开发套件(MSP-EXP430FR4133)用户指南
- 2.21MB | 1次下载 | 免费
- 5MSP-EXP430FR5969快速入门指南
- 2.18MB | 1次下载 | 免费
- 6MSP430FR5969 LaunchPad开发套件(MSP-EXP430FR5969)用户指南
- 3.13MB | 1次下载 | 免费
- 704-01-02-CBM317线性稳压器(LDO)
- 2.01 MB | 1次下载 | 免费
- 8bq27546-G1技术参考手册
- 790.02KB | 次下载 | 免费
本月
- 12024PMIC市场洞察
- 2.23 MB | 158次下载 | 免费
- 2开关电源设计原理手册
- 1.83 MB | 41次下载 | 免费
- 3FS5080E 5V升压充电两串锂电池充电管理IC中文手册
- 8.45 MB | 21次下载 | 免费
- 4OAH0428最新规格书(中文)
- 2.52 MB | 15次下载 | 7 积分
- 5DMT0660数字万用表产品说明书
- 0.70 MB | 13次下载 | 免费
- 6UC3842/3/4/5电源管理芯片中文手册
- 1.75 MB | 12次下载 | 免费
- 7ST7789V2单芯片控制器/驱动器英文手册
- 3.07 MB | 11次下载 | 1 积分
- 8慧荣SM2263XT开卡软件-B16_B17_FW_S0614B0_RDT_S0617A
- 3.03 MB | 9次下载 | 5 积分
总榜
- 1matlab软件下载入口
- 未知 | 935119次下载 | 10 积分
- 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
- 1.48MB | 420061次下载 | 10 积分
- 3Altium DXP2002下载入口
- 未知 | 233084次下载 | 10 积分
- 4电路仿真软件multisim 10.0免费下载
- 340992 | 191367次下载 | 10 积分
- 5十天学会AVR单片机与C语言视频教程 下载
- 158M | 183335次下载 | 10 积分
- 6labview8.5下载
- 未知 | 81581次下载 | 10 积分
- 7Keil工具MDK-Arm免费下载
- 0.02 MB | 73807次下载 | 10 积分
- 8LabVIEW 8.6下载
- 未知 | 65987次下载 | 10 积分
评论
查看更多