关于pic18f4550的c语言编程实例.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
关于pic18f4550的c语言编程实例

下面的示例应用程序将使得与PIC18C452 单片机PORTB 端口相连的LED 闪烁。编译 此应用程序的命令行是: mcc18 -p 18c452 -I c:\mcc18\h leds.c c:\mcc18 是安装编译器的目录。这个示例应用程序设计为与PICDEM 2 演示板配合 使用。示例程序包括: 1. 中断处理(#pragma interruptlow、中断向量、 中断服务程序和现场保护) 2. 系统头文件 3. 针对处理器的头文件 4. #pragma sectiontype 5. 行内汇编 /* 1 */ #include p18cxxx.h /* 2 */ #include timers.h /* 3 */ /* 4 */ #define NUMBER_OF_LEDS 8 /* 5 */ /* 6 */ void timer_isr (void); /* 7 */ /* 8 */ static unsigned char s_count = 0; /* 9 */ /* 10 */ #pragma code low_vector=0x18 /* 11 */ void low_interrupt (void) /* 12 */ { /* 13 */ _asm GOTO timer_isr _endasm /* 14 */ } /* 15 */ /* 16 */ #pragma code /* 17 */ /* 18 */ #pragma interruptlow timer_isr save=PROD /* 19 */ void /* 20 */ timer_isr (void) /* 21 */ { /* 22 */ static unsigned char led_display = 0; /* 23 */ /* 24 */ INTCONbits.TMR0IF = 0; /* 25 */ /* 26 */ s_count = s_count % (NUMBER_OF_LEDS + 1); /* 27 */ /* 28 */ led_display = (1 s_count++) - 1; /* 29 */ /* 30 */ PORTB = led_display; /* 31 */ } /* 32 */ /* 33 */ void /* 34 */ main (void) /* 35 */ { /* 36 */ TRISB = 0; /* 37 */ PORTB = 0; /* 38 */ /* 39 */ OpenTimer0 (TIMER_INT_ON T0_SOURCE_INT T0_16BIT); /* 40 */ INTCONbits.GIE = 1; /* 41 */ /* 42 */ while (1) /* 43 */ { /* 44 */ } /* 45 */ } 第 1 行: 这一行包含了一般处理器头文件。通过命令行选项-p 选择正确的处理 器(参阅2.5.1 节“系统头文件”和2.10 节“针对处理器的头文 件”)。 第 10 行: 对于PIC18 单片机来说,低优先级中断向量位于 000000018h。这行 代码将当前代码段从默认代码段更改为地址为 0x18 处, 名为 low_vector 的绝对代码段(参阅2.9.1 节“#pragma sectiontype”和2.9.2.3 节“中断向量”)。 第 13 行: 此行包含行内汇编,其功能是跳转到中断服务程序(参阅2.8.2 节 “行内汇编”和2.9.2.3 节“中断向量”)。 第 16 行: 此行使编译器返回到默认的代码段(参阅2.9.1 节“#pragma sectiontype”和表2-7)。 第 18 行: 此行将函数timer_isr 声明为低优先级中断服务程序。为了使编译器 为函数timer_isr 生成RETFIE 指令而不是RETURN 指令,上述声 明是必需的。另外,它还能确保特殊功能寄存器PROD 的值得到保存。 (2.9.2 节“#pragma interruptlow fname / #pragma interrupt fname”和2.9.2.4 节“中断现场保护”)。 第 19-20 行: 这两行定义了函数timer_isr。请注意:timer_isr 没有参数,也 没有返回值(这是中断服务程序的要求)(请参阅2.9.2.2 节“中断 服务程序”)。 第 24 行: 清除TMR0 的中断标志,以避免程序多次处理同一个中断(参阅 2.10 节“针对处理器的头文件”)。 第 30 行: 示范如何在C 程序中修改特殊功能寄存器PORTB (参阅2.10 节“针 对处理器的头文件”)。 第36-37 行: 初始

文档评论(0)

tmd2017 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档