初学PIC,写了一个定时跑马灯程序,以供新手学习PIC提供子资料,文中给出了详细代码和注释,对照手册,新手完全可以看懂,便于理解和后期开发,给予新手打开PIC的大门钥匙。


1、开发环境:我选择的是 MPLAB x IDE 

2、芯片型号:8位单片机,PIC16F684

3、程序功能:


(1)RC3、RC4接两个LED灯,低电平点亮

(2)时钟选用内部时钟8MHZ

(3)定时时间为1ms进一次中断

(4)计时500ms,小灯500ms亮,500ms灭

/*********************************************/

/***

        芯片型号:PIC16F684

1、RC3、RC4接两个LED灯,低电平点亮

2、时钟选用内部时钟8MHZ

3、定时时间为1ms进一次中断

4、小灯500ms亮,500ms灭

*************************/


4、程序代码


/*

* File: main.c

* Author: 夏夕空

* Created on 2018年02月06日

* Version: V1.0 beta0

* 系统时钟选用内部8M晶振

*/

#include

// PIC16F684 Configuration Bit Settings

// 'C' source line config statements

__CONFIG(FOSC_INTOSCIO & WDTE_OFF & PWRTE_ON &MCLRE_OFF &

        CP_OFF & CPD_OFF & BOREN_OFF & IESO_ON & FCMEN_ON);

#define uchar unsigned char

#define uint unsigned int

#define ulong unsigned long

#define  Time_base 1 //定时1ms

#define FOSC 8000        //时钟频率8MHZ

#define LED TRISC                // LEDI/O口


void delay_ms(uint xms);        //非精确延时,有误差

void Timer0_Init(void);         //定时器0初始化


/***************************************

* 名    称:delay_ms()

* 功    能:非精确延时

* 输入参数:无

* 返回参数:无

***************************************/

void delay_ms(uint xms)

{

uint x,y;

for(x=xms; x>0;x--)

     for(y=2000;y>0;y--);

}

/***************************************

* 名    称:Timer0_Init()

* 功    能:初始化定时器0

* 输入参数:无

* 返回参数:无

***************************************/

volatile uchar temp =0;             //temp为初始值缓存

void Timer0_Init(void)

{

    T0CS = 0;       //选择定时器模式,T0CS =1为计数器模式,T0CS =0为定时器模式

    T0SE = 0;       //定时器上升沿递增,T0SE =0为上升沿递增,T0SE =1为下降沿递增

    PSA = 0;        //预分频器分给定时器

/***三种方式都可以****/

    OPTION_REG &= 0xF8;  //1B 1111 1000     32分频

    OPTION_REG |= 0x04;  //1B 0000 0100

    /*

    PS2 = 1;        //1B 0000 0100     32分频

    PS1 = 0;

    PS0 = 0;

    */

//  OPTION_REG = 0x04; //1B 0000 0100     32分频

    T0IF = 0;       //定时器0溢出标志位

    GIE = 1;        //总中断允许位,GIE =1为允许所有未屏蔽中断,GIE =0禁止中断

    T0IE = 1;       //定时器0溢出中断允许,T0IE =1,允许溢出时中断,T0IE =0不允许中断

    temp = 256-((Time_base*FOSC)/4/32);  //定时1ms

    TMR0 = temp;      //重载初始值

}

/*全局静态变量count*/

static uint count = 0;

/***************************************

* 名    称:main()

* 功    能:根据协议处理数据

* 输入参数:无

* 返回参数:无

***************************************/

void main(void)

{

    delay_ms(5);        //等待时钟稳定

    PORTC &=0xE7;       //RC3,RC4选择为输出模式

    Timer0_Init();      //定时器0初始化

    LED &= 0xF7; //1B1111 0111选择小灯初始状态 RC3亮

    LED |=0x10;  //1B0001 0000                 RC4灭

    while(1)

    {

        if(count == 500)       //500ms时间到

        {

            count = 0;         //清零计数

            LED = ~LED;         //小灯翻转

        }

        else            //时间没到,空等待

        {

        }

    }

}

/***************************************

* 名    称:Timer0_Isr()

* 功    能:产生1ms时基

* 输入参数:无

* 返回参数:无

***************************************/

void interrupt Timer0_Isr(void)

{

    if(T0IF == 1)          //如果溢出中断

    {     

        T0IF = 0;         //标志位清0

        temp = 256-((Time_base*FOSC)/4/32);

        TMR0 = temp;      //重载初始值

        count++;          //计数++

    }

}


关键字:PIC16F684  单片机  定时中断  跑马灯 引用地址:PIC16F684单片机定时中断跑马灯

上一篇:用pic16f630 MCU实现的315MHZ无线软件解码和编码.代替PT2272和pt2262
下一篇:PIC16F877输出正弦波信号PROTEUS仿真及程序

推荐阅读

谷歌去年的Pixel 2系列由于出现了很多质量问题而被吐槽,现在看来貌似Pixel 3系列也没能逃过糟糕品控的魔咒。        拥有700多万粉丝的Youtube科技达人Marques Brownlee(MKBHD)在Twitter发文称自己的Pixel 3 XL屏幕中间出现了永久性的粉红线,Brownlee直呼“WTF”。        Brownlee称无论重启还是怎么样,这条红线无法消失,据悉...
作为一年一度的物流行业顶级盛会CeMATASIA2019亚洲物流展刚刚落下帷幕仙知机器人以独具一格的现场展示赢得了许多中外专业观众的广泛关注同时也留下了许多精彩瞬间现在就让我们一起回顾一下吧~仙知展台现场展示打造移动机器人现场展示如何通过SRC核心控制器打造移动机器人仙知专业工程师为专业观众进行现场介绍观众直观体验SRC核心控制器超强适配性基于SRC...
据曼谷邮报报道,华为技术(泰国)有限公司与泰国劳工部技能发展厅于近日签署了《数字技能发展谅解备忘录》。据悉,此次合作旨在加强泰国的数字技术与技能发展。未来三年,双方将创造并促进当地的学习机会和实践培训,以确保泰国能够满足劳动力市场的需求,降低失业率、提高收入,并改善生活水平。泰国劳工部副部长娜叻蒙(Narumon Pinyosinwat)在活动致辞...
10月26日晚间,新宙邦发布三季度业绩公告,年初至报告期末,公司实现营业收入约44.69亿元,同比增长122.82%。实现归属于上市公司股东的净利润约8.68亿元,同比增长132.19%。其中,第三季度净利润4.31亿元,同比上升217%。实现基本每股收益2.11元,同比增长122.11%。业绩变动主要原因,新宙邦表示,第一,随着新能源汽车市场爆发式增长,带动动力锂电池出货...

史海拾趣

问答坊 | AI 解惑

Protel常用元件库

湖北师院物理系电信专业实验室田开坤(整理)的Protel常用元件库。         包含74系列,CMOS系列,存储器,单片机,杂元件,ADC,数码管,定时器等等,中文名称,特别实用。…

查看全部问答∨

老师在线:嵌入式相关问题,可在此讨论

嵌入式相关问题,可在此提问,各位同行请在这里跟帖提问、交流。 EEWORLD在这里期待与你讨论。 欢迎大家多多说出自己的想法,并帮助坛子里的朋友回答问题~~ 老师介绍: 欧文盛: 顶嵌(www.top-e.org)高级讲师,主要研究和工作领域是嵌入 ...…

查看全部问答∨

变压器设计经典文章

之前看到有网友说不是经典我不发,非常赞同,于是也分享一个经典中的经典:变压器设计 …

查看全部问答∨

汽车主动安全系统领域的重要角色——TPMS

TPMS是汽车轮胎压力实时监视系统“Tire Pressure Monitoring System”的英文缩写,主要用于在汽车行驶时实时地对轮胎气压进行自动监测,对轮胎漏气和低气压进行报警,以保障行车安全,是驾车者、乘车人的生命安全保障预警系统。   在汽车的高速 ...…

查看全部问答∨

0P放大电路设计

初次发帖~多多支持~~献上一本好书~~共同学习~~~…

查看全部问答∨

Timing Reference Codes是什么含义?

我在DM643的VP口配置中看到这个概念,不理解,好像跟模数转换有关系,谁了解这个概念?…

查看全部问答∨

PIC16F631应该用哪个版本的C编译器啊?

装了PICC8.05,发现没找到PIC16F631的头文件 PICC9.60 也没有找到头文件 如果谁有它的编译器,麻烦上传一个吧! 或者发一个到我的邮箱yuexianhanshu@yahoo.com.cn…

查看全部问答∨

wince 键盘驱动的疑问, 扫描码转键值后,进入系统后发生变化

wince 6.0 + pxa270 一个简单矩阵键盘, 共6个按键 在键盘驱动的 KeyButton_GetEventEx2(UINT rguiScanCode[16], BOOL rgfKeyUp[16]) 函数中 分别映射为 VK_F1, VK_F2, VK_F3,VK_F4, VK_F5 通过打印消息分别是 vk_f1, vk_f2 vk_f3 vk_f4 vk_f5 ...…

查看全部问答∨

驱动中如何遍历物理内存?

我想在应用程序中遍历整个物理内存,要想这样只能通过驱动程序实现,并把接口提供出来. 现在问题是,如何才能用驱动实现遍历这个物理内存呢?(我的内存是512M的) 请大侠们给个思路...…

查看全部问答∨

V2.0.3例子中的NAND的读写是那个硬件啊?

                                 官方只给一个示例,也找不到应用文档,有几个问题想搞清楚,但是不能给实际用NAND进行对照…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved