没有合适的资源?快使用搜索试试~ 我知道了~
首页MPLAB-IDE中使用HitechC编译器:PIC C语言入门教程
MPLAB-IDE中使用HitechC编译器:PIC C语言入门教程
需积分: 10 3 下载量 93 浏览量
更新于2024-08-01
收藏 479KB PDF 举报
本文档主要介绍了如何在单片机平台,如PIC(微控制器)上使用C语言编程,特别是针对MPLAB-IDE环境和HitechC编译器的配置与操作。首先,作者详细指导了如何在MPLAB-IDE中安装和配置HitechC编译器,包括选择正确的语言套件(HI-TECHPICC)、设置编译器、汇编器和链接器的调用路径,确保所有组件指向PICC.EXE。 接着,作者强调了在项目设置中的关键步骤,例如更改项目的语言工具套件为HI-TECHPICC,以便正确关联所需的编译器。为了便于调试和分析代码效率,设置了节点属性,如生成调试信息、创建映射文件以及选择错误处理选项。此外,对于是否使用ICD(In-Circuit Debugger),用户需要根据需求调整编译选项,以平衡代码优化与资源使用。 在实际编译过程中,作者提醒用户选择C编译器作为节点文件的工具,并设置适当的编译选项,如局部和全局优化。这样可以优化代码执行效率,但需注意避免不必要的ICD编译配件配置。 最后,文档展示了编译成功的界面,这表明用户已经成功地在MPLAB-IDE中使用C语言为PIC开发程序。这对于初学者来说是一份实用的教程,帮助他们掌握在嵌入式系统中使用C语言编程的基础知识和工具配置技巧。通过这些步骤,学习者可以建立起在PIC硬件上编写和调试C程序的能力,为进一步的硬件编程和系统集成打下坚实的基础。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/2394741/bgf.jpg)
void CCP1INIT()
{
CCPR1L=0X7F;
CCP1CON=0X3C; /*设置 CCP1 模块为 PWM 工作方式,且其工作循环
*的低 2 位为 11,高 8 位为 01111111=7F*/
INTCON=0X00; /*禁止总中断和外围中断*/
PR2=0XFF; /*设置 PWM 的工作周期*/
TRISC=0XFB; /*设置 CCP1 引脚为输出方式*/
}
该初始化子程序设置 CCP1 模块输出分辨率为 10 位的 PWM 波形,且占空比为 50%。
5.6.3 程序清单
下面给出一个调试通过的例程,可作为读者编制程序的参考。
#include <pic.h>
/*该程序用于使 CCP1 模块产生分辨率为 10 位的 PWM 波形,占空比为 50%*/
/*CCP1 模块的 PWM 工作方式初始化子程序*/
void CCP1INIT()
{
CCPR1L=0X7F;
CCP1CON=0X3C; /*设置 CCP1 模块为 PWM 工作方式,且其工作
*循环的低 2 位为 11,高 8 位为 01111111=7F*/
INTCON=0X00; /*禁止总中断和外围中断*/
PR2=0XFF; /*设置 PWM 的工作周期*/
TRISC=0XFB; /*设置 CCP1 引脚为输出方式*/
}
/*主程序*/
main()
{
CCP1INIT(); /*CCP1模块的 PWM 工作方式初始化*/
T2CON=0X04; /*打开 TMR2,且使其前分频为 0,
*同时开始输出 PWM 波形*/
do
{
;
}while(1); /*系统开始输出 PWM 波形。如果系统是
*多任务的,则可以在此执行其它任务,而
*不会影响 PWM 波形的产生*/
}
5.7.3 应用程序
2. 程序清单
#include <pic.h>
/*此程序实现"看门狗"WDT 的功能*/
![](https://csdnimg.cn/release/download_crawler_static/2394741/bg10.jpg)
unsigned long I;
/*系统初始化子程序*/
void initial()
{
OPTION = 0X0F; /*把前分频器分配给 WDT,且分频倍率为 1:128*/
TRISD = 0X00; /*D口设为输出*/
}
/*延时子程序*/
void DELAY()
{
for (i=19999;--i;)
continue;
}
/*主程序*/
main ()
{
initial(); /*初始化,设定看门狗的相关寄存器*/
PORTD = 0X00; /*D口送 00H,发光二极管亮*/
DELAY(); /*给予一定时间的延时*/
PORTD = 0XFF; /*D口送 FFH,发光二极管灭*/
while(1)
{
;
} /*死循环,等待看门狗溢出复位*/
}
5.8.3 程序清单
该例在 PIC16F877 休眠前使 8 个发光二极管的高 4 个发光,然后进入休眠工作方式;若
按键引起的中断将其激活,则低 4 个发光。用 C 语言编写程序时,语句 SLEEP()相当于
汇编语言中的语句“sleep”,使单片机进入休眠状态。
#include <pic.h>
/*该程序实现 PIC16F877 的休眠工作方式,并由实验板上的按键产生"电平变化中断"将其*
从休眠状态中激活。休眠与激活的状态由与 D 口相连的 8 个 LED 显示。休眠时高 4 个
*LED 发光,低 4 个 LED 熄灭; 激活以后高 4 个 LED 熄灭,低 4 个 LED 发光*/
unsigned long i;
/*系统初始化子程序*/
void initial()
{
di(); /*全局中断禁止,"电平变化中断"只执行唤醒功能*/
RBIE=1; /*PORTB口电平变化中断允许*/
RBIF=0; /*清除 B 口电平变化中断标志*/
TRISB4=1;
TRISB5=1;
TRISB2=0;
TRISB1=0; /*设置与键盘有关的各 I/O 口的输入输出方式*/
![](https://csdnimg.cn/release/download_crawler_static/2394741/bg11.jpg)
TRISD=0X00; /*D 口为输出*/
PORTB=0X00; /*键盘的行线送低电平,为“电平变化中断” 作准备*/
PORTB=PORTB; /*读 PORTB 的值,锁存旧值,也为“电平变化
*中断”作准备*/
}
/*主程序*/
main ()
{
initial(); /*初始化*/
PORTD=0X0F; /*高 4 个 LED 灯亮*/
SLEEP(); /*单片机开始进入休眠状态*/
PORTD=0XF0; /*激活后,低 4 个 LED 灯亮*/
while(1)
{
;
}
}
第 6 章 模拟量输入与输出
6.1 A/D 转换的应用
例 6.1 A/D 转换初始化程序
//A/D 转换初始化子程序
void adinitial( )
{
ADCON0 = 0x51; //选择 A/D 通道为 RA2,打开 A/D 转换器
//在工作状态,且使 AD 转换时钟为 8t
osc
ADCON1 = 0X80; //转换结果右移,及 ADRESH 寄存器的高 6 位为"0"
//且把 RA2 口设置为模拟量输入方式
PIE1 = 0X00;
PIE2 = 0X00;
ADIE = 1; //A/D 转换中断允许
PEIE = 1; //外围中断允许
TRISA2=1; //设置 RA2 为输入方式
}
6.1.2 程序清单
下面给出一个调试通过的例程,可作为读者编制程序的参考。该程序中用共用体的方式
把 A/D 转换的 10 位结果组合在一起。有关共用体的详细资料请参考本书相关章节。
# include <pic.h>
union adres
{int y1;
unsigned char adre[2];
}adresult; //定义一个共用体,用于存放 A/D 转换的结果
![](https://csdnimg.cn/release/download_crawler_static/2394741/bg12.jpg)
unsigned char i;
unsigned int j;
//系统各 I/O 口初始化子程序
void initial()
{
TRISD=0X00; //D 口为输出
i=0x00;
}
//A/D 转化初始化子程序
void adinitial()
{
ADCON0=0x51; //选择 A/D 通道为 RA2,打开 A/D 转换器
//在工作状态,且使 A/D 转换时钟为 8t
osc
ADCON1=0X80; //转换结果右移,及 ADRESH 寄存器的高 6 位为"0"
//且把 RA2 口设置为模拟量输入方式
PIE1=0X00;
PIE2=0X00;
ADIE=1; //A/D 转换中断允许
PEIE=1; //外围中断允许
TRISA2=1; //设置 RA2 为输入方式
}
//延时子程序
void delay()
{
for(j=5535;--j;) continue;
}
//报警子程序
void alarm()
{
i=i^0xFF; //通过异或方式每次把 i 的各位值取反
PORTD=i; //D口输出 i 的值
}
//中断服务程序
void interrupt adint(void)
{
ADIF=0; //清除中断标志
adresult.adre[0]=ADRESL;
adresult.adre[1]=ADRESH; //读取并存储 A/D 转换结果,A/D 转换的结果通过共
//用体的形式放入了变量 y1 中
if(adresult.y1>0x200)
{
alarm(); //如果输入的模拟量大于 2.5V(对应数字量
//0X200h),则调用报警子程序
delay(); //调用延时子程序,使电压检测不要过于频繁
![](https://csdnimg.cn/release/download_crawler_static/2394741/bg13.jpg)
}
else PORTD=0XF0 ; //如果输入的模拟量小于 2.5V,则与 D 口相连的
//8个发光二极管的低 4 个发亮,表示系统正常
ADGO=1; //启动下一次 A/D 转换
}
//主程序
main()
{
adinitial(); //A/D 转换初始化
initial(); //系统各 I/O 口初始化
ei(); //总中断允许
ADGO=1; //启动 A/D 转换
while(1)
{
;
} //等待中断,在中断中循环检测外部电压
}
6.2.2 I
2
C 总线工作方式相关子程序
1.C 语言编写的 I
2
C 总线工作方式的初始化子程序
//I
2
C 初始化子程序
void i2cint()
{
SSPCON = 0X08; //初始化 SSPCON 寄存器
TRISC3 =1; //设置 SCL 为输入口
TRISC4 =1; //设置 SDA 为输入口
TRISA4 = 0;
SSPSTAT=0X80; //初始化 SSPSTAT 寄存器
SSPADD=0X02; //设定 I
2
C 时钟频率
SSPCON2=0X00; //初始化 SSPCON2 寄存器
di(); //关闭总中断
SSPIF=0; //清 SSP 中断标志
RA4=0; //关掉 74HC165 的移位时钟使能,以免 74HC165 移位
//数据输出与 I
2
C 总线的数据线发生冲突(此操作与该
//实验板的特殊结构有关,不是通用的)
SSPEN=1; //SSP模块使能
}
2.C 语言编写的 I
2
C 总线工作方式传输数据子程序
需要发送的数据在寄存器 j 中。
//I
2
C 总线输出数据子程序
i2cout()
{
SEN=1; //产生 I
2
C 启动信号
剩余92页未读,继续阅读
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
dodoopty
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 构建Cadence PSpice仿真模型库教程
- VMware 10.0安装指南:步骤详解与网络、文件共享解决方案
- 中国互联网20周年必读:影响行业的100本经典书籍
- SQL Server 2000 Analysis Services的经典MDX查询示例
- VC6.0 MFC操作Excel教程:亲测Win7下的应用与保存技巧
- 使用Python NetworkX处理网络图
- 科技驱动:计算机控制技术的革新与应用
- MF-1型机器人硬件与robobasic编程详解
- ADC性能指标解析:超越位数、SNR和谐波
- 通用示波器改造为逻辑分析仪:0-1字符显示与电路设计
- C++实现TCP控制台客户端
- SOA架构下ESB在卷烟厂的信息整合与决策支持
- 三维人脸识别:技术进展与应用解析
- 单张人脸图像的眼镜边框自动去除方法
- C语言绘制图形:余弦曲线与正弦函数示例
- Matlab 文件操作入门:fopen、fclose、fprintf、fscanf 等函数使用详解
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)