实验一:printfusb("Hello World !\r\n"), 第一个完整的C语言程序
源代码分析:
- c
- include "stc8hh" //头文件不分大小写,但关键字分大小写
- include "aiusbh" //USB 库和 USB 虚拟设备的头文件,需要在项目文件中添加对应的 USB 库
- void main(void)
- {
- // EAXFR=1;允许访问扩展的特殊寄存器,XFR
-
- // WTST = 0;设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
- // CKCON = 0;设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间
- PSW2|=0X80;////使能可以访问扩展的特殊功能寄存器XFR,没有冲突不用关闭
- usbinit();//初始化 USB 模块,并且会将【P30, P31】初始化为高阻输入,不影响 USB【D-, D+】通讯
- EA=1;//使能总中断
- }
复制代码
代码解析:
1. 头文件引入:
#include "stc8hh":引入特定型号的单片机头文件,该文件包含了该型号单片机的所有寄存器定义和宏定义。需要注意的是,头文件名称不区分大小写,但C语言中的关键字是区分大小写的。
#include "aiusbh":引入USB库和USB虚拟设备的头文件,该库提供了USB通信的相关功能。在项目中需要确保该库文件已正确添加。
2. 主函数 main:
void main(void):主函数是程序的入口点,返回类型为 void,表示不返回任何值。
3. 特殊寄存器访问:
PSW2|=0X80;:通过设置 PSW2 寄存器的最高位(0X80),使能访问扩展的特殊功能寄存器(XFR)。这一操作通常在需要访问单片机扩展功能时使用,确保没有寄存器冲突时无需关闭。
4. USB模块初始化:
usbinit();:初始化USB模块。该函数会将 P30 和 P31 引脚初始化为高阻输入状态,以确保不影响 D- 和 D+ 的USB通信。
5. 总中断使能:
EA=1;:使能总中断。单片机的中断系统在默认情况下是关闭的,通过设置 EA 寄存器为 1,可以打开所有中断源,使单片机能够响应外部或内部的中断事件。
实验目的:
本实验的目的是通过编写一个简单的C语言程序,利用USB接口输出“Hello World !”字符串,从而熟悉单片机的基本编程流程、USB模块的初始化以及中断系统的使用。
实验步骤:
1. 环境搭建:
确保开发环境已正确配置,包括编译器、调试器和相关库文件。
在项目中添加 stc8hh 和 aiusbh 头文件,并确保路径正确。
2. 代码编写:
按照上述代码编写主函数,确保每个步骤的注释清晰,便于理解。
3. 编译与下载:
使用编译器将代码编译为可执行文件,并通过调试器将程序下载到单片机中。
4. 运行与调试:
运行程序,观察USB接口是否成功输出“Hello World !”字符串。
如果输出不正确,检查代码逻辑、硬件连接以及USB模块的配置。
注意事项:
寄存器访问: 在访问特殊功能寄存器时,确保正确设置相关位,避免与其他功能冲突。
USB初始化: USB模块的初始化是关键步骤,确保 P30 和 P31 引脚正确配置为高阻输入,避免影响通信。
中断使能: 在使能总中断前,确保所有相关中断源已正确配置,避免意外中断导致程序异常。
总结:
通过本实验,我们成功实现了一个简单的C语言程序,利用单片机USB接口输出“Hello World !”字符串。该实验不仅帮助我们熟悉了单片机的基本编程流程,还加深了对USB模块和中断系统的理解。在实际开发中,掌握这些基础知识和技能对于后续更复杂的项目开发具有重要意义。
[本文内容由国芯人工智能辅助生成,仅供参考] |