STM8 C语言入门教程:14节讲解启动代码与中断处理

4星 · 超过85%的资源 需积分: 10 22 下载量 77 浏览量 更新于2024-07-26 收藏 608KB DOC 举报
本篇文章是关于STM8系列单片机的C语言编程教程,共分为14讲,旨在帮助初学者轻松入门STM8S单片机的C语言开发。STM8单片机支持C语言编程,相比汇编语言,C语言具有更好的可读性和易维护性。 首先,开发环境中创建新工程时,会自动生成两个关键的C源文件:main.c和stm8_interrupt_vector.c。main.c文件主要包含了一个无限循环,即`while(1)`,作为程序的基本入口点,其目的是确保程序始终运行,直到被外部中断或系统其他因素停止。这个空的`main()`函数如下: ```c // 主函数入口 main() { while(1); } ``` 另一方面,`stm8_interrupt_vector.c`文件包含了中断向量表,这是处理单片机各种中断事件的核心部分。中断向量表定义了中断处理函数的地址以及对应的中断指令。每个结构体`interrupt_vector`包含中断指令和中断处理函数的指针,如示例中的`NonHandledInterrupt`,它用于处理未捕获的中断: ```c // 中断向量表结构体 struct interrupt_vector { unsigned char interrupt_instruction; interrupt_handler_t interrupt_handler; }; // 未处理中断函数 @far@interrupt void NonHandledInterrupt(void) { // 设置断点以检测开发过程中意外事件 return; } // 启动程序入口 extern void _stext(); // startup routine struct interrupt_vector const_vectab[] = { {0x82, (interrupt_handler_t)_stext}, // reset interrupt // 其他中断向量... }; ``` 在这个代码片段中,`_stext()`是系统的启动程序,当单片机上电或者复位时执行。每个向量表项对应一个特定的中断类型,如`reset`、`trap`、`irq0`至`irq2`等,中断发生时,CPU会跳转到对应的`interrupt_handler`函数进行处理。 总结起来,本节内容介绍了STM8S单片机C语言编程的基础,包括如何在开发环境中建立项目,理解主程序的`main()`函数作用,以及中断向量表的构成和功能。通过后续13讲的学习,读者将逐步掌握如何利用C语言进行STM8S的硬件交互、数据处理和中断管理,从而实现更为复杂的系统设计。
2011-04-20 上传
关于呼吸灯的C语言编程Options 1,0,0 // Target 'Target 1' Device (AT89C51) Vendor (Atmel) Cpu (IRAM(0-0x7F) IROM(0-0xFFF) CLOCK(24000000)) FlashUt () StupF ("LIB\STARTUP.A51" ("Standard 8051 Startup Code")) FlashDR () DevID (2976) Rgf (REGX51.H) Mem () C () A () RL () OH () DBC_IFX () DBC_CMS () DBC_AMS () DBC_LMS () UseEnv=0 EnvBin () EnvInc () EnvLib () EnvReg (Atmel\) OrgReg (Atmel\) TgStat=16 OutDir (.\) OutName (a9) GenApp=1 GenLib=0 GenHex=1 Debug=1 Browse=1 LstDir (.\) HexSel=0 MG32K=0 TGMORE=0 RunUsr 0 0 RunUsr 1 0 BrunUsr 0 0 BrunUsr 1 0 SVCSID MODEL5=0 RTOS5=0 ROMSZ5=2 DHOLD5=0 XHOLD5=0 T51FL=80 XT51FL=0 CBANKS5=0 XBANKS5=0 RCB51 { 0,0,0,0,0,0,0,1,0 } RXB51 { 0,0,0,0,0,0,0,0,0 } OCM51 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } OCR51 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } IRO51 { 1,0,0,0,0,0,16,0,0 } IRA51 { 0,0,0,0,0,128,0,0,0 } XRA51 { 0,0,0,0,0,0,0,0,0 } XRA512 { 0,0,0,0,0,0,0,0,0 } IROM512 { 0,0,0,0,0,0,0,0,0 } C51FL=21630224 C51VA=0 C51MSC () C51DEF () C51UDF () INCC5 () AX51FL=4 AX51MSC () AX51SET () AX51RST () INCA5 () PropFld { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } IncBld=1 AlwaysBuild=0 GenAsm=0 AsmAsm=0 PublicsOnly=0 StopCode=3 CustArgs () LibMods () BankNo=65535 LX51FL=292 LX51OVL () LX51MSC () LX51DWN () LX51LFI () LX51ASN () LX51RES () LX51CCL () LX51UCL () LX51CSC () LX51UCS () LX51COB () LX51XDB () LX51PDB () LX51BIB () LX51DAB () LX51IDB () LX51PRC () LX51STK () LX51COS () LX51XDS () LX51BIS () LX51DAS () LX51IDS () OPTDL (S8051.DLL)()(DP51.DLL)(-p51)(S8051.DLL)()(TP51.DLL)(-p51) OPTDBG 48125,-1,()()()()()()()()()() ()()()() FLASH1 { 0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0 } FLASH2 () FLASH3 () FLASH4 () EndOpt