历史上的今天
返回首页

历史上的今天

今天是:2024年10月28日(星期一)

正在发生

2019年10月28日 | PIC16F684单片机定时中断跑马灯

2019-10-28 来源:51hei

初学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++;          //计数++

    }

}


推荐阅读

史海拾趣

Advanced Energy公司的发展小趣事

随着公司的不断发展壮大,AE公司于某一时期成功在纳斯达克上市。这一里程碑事件标志着AE公司在电子行业的地位得到了进一步的巩固和提升。上市为公司带来了更多的资金支持,使得AE公司能够加大在研发、生产、销售等方面的投入,进一步提升了公司的竞争力。同时,上市也增强了公司的品牌影响力,吸引了更多的合作伙伴和客户。

台湾岱恩(DAIN)公司的发展小趣事

品质是Cornerstone Sensors的生命线。公司建立了严格的质量管理体系,从原材料采购、生产制造到产品测试等各个环节都进行严格把控。同时,公司还注重品牌建设,通过参加行业活动、发布技术文章、提供专业培训等方式提升品牌影响力。Cornerstone Sensors的产品逐渐成为行业内公认的高品质代表,赢得了广泛的口碑和市场份额。

AUSTIN公司的发展小趣事

然而,好景不长。奥斯汀公司在全力投入研发的WW1车系上遭遇了挫折,销售不佳导致公司濒临破产。在这个关键时刻,奥斯汀汽车公司通过研发新的车型来寻求突破。1922年,Seven车系成功上市,凭借其卓越的性能和合理的价格,使得奥斯汀汽车转危为安,重新获得了市场的认可。

HELUKABEL公司的发展小趣事

随着汽车市场的不断变化和消费者需求的多样化,奥斯汀汽车也在不断调整市场策略和产品布局。公司根据市场需求推出了一系列新的车型,并积极拓展海外市场。虽然奥斯汀汽车在历史长河中经历了许多波折和挑战,但其品牌精神和传统始终得以传承和发扬。如今,奥斯汀汽车已经成为了英国汽车文化的重要组成部分,其经典车型和品牌形象仍然深受消费者喜爱。

这些故事展示了AUSTIN汽车公司在汽车行业中的发展历程,从创始与早期成功,到危机与重生,再到技术合作与国际化发展,以及产品创新与多样化,最终实现了市场调整与品牌传承。这些事实性的描述,旨在呈现AUSTIN汽车公司在历史长河中的真实面貌,而不涉及任何褒贬评价。

AXTAL公司的发展小趣事

近年来,电子行业面临着诸多市场挑战与机遇。在这场全球供应链的博弈中,AXTAL公司展现出了敏锐的市场洞察力和应变能力。面对中国发布的镓锗禁令,AXTAL巧妙地抓住了第一个漏洞,通过在中国设立的子公司申请出口镓锗的许可证,成功绕过了禁令的限制。这一睿智之举不仅为公司打开了新的市场窗口,也彰显了公司在应对市场挑战时的灵活性和创造力。

Esico-Triton公司的发展小趣事

随着市场的不断变化,Esico-Triton意识到技术创新是企业持续发展的关键。于是,在XXXX年代初,公司投入大量资源进行技术研发。经过不懈的努力,他们成功开发出了一种新型的集成电路,大大提高了电子设备的性能和稳定性。这项技术的突破使得Esico-Triton的产品在市场上更具竞争力,并赢得了众多重要客户的青睐。

问答坊 | AI 解惑

逆变资料

本帖最后由 paulhyde 于 2014-9-15 09:23 编辑 自己用的,可能对大家有用  …

查看全部问答>

程序返回值问题,欢迎大虾米来指导

最近我常用的一个函数出了点异样,大虾米现身了!!!HOHO 函数如下: unsigned int SysTim; unsigned int PreTim1; unsigned int PreTim2; unsigned int LenTim(unsigned int preTim, unsigned int sysTim) { if (preTim > sysTim) { return (0 ...…

查看全部问答>

四步骤让你搞定模拟电路学习

众所周知,模拟电路难学,以最普遍的晶体管来说,我们分析它的时候必须首先分析直流偏置,其次在分析交流输出电压。可以说,确定工作点就是一项相当麻烦的工作(实际中来说),晶体管的参数多、参数的离散性也较大。但值得我们注意的是,模拟电路构 ...…

查看全部问答>

帮我看下,左边是信号源,右边是AD

来自EEWORLD合作群:arm linux fpga 嵌入0(49900581)群主:wangkj…

查看全部问答>

紧急!!!!!!!!!!

有谁了解深圳\"研祥智能科技\"公司吗?那边的待遇怎么样,我是08年的应届毕业生,我很想知道,本科生在那边的待遇和发展怎么样呢? 望各位知情的大虾帮帮忙啊 ~谢过~…

查看全部问答>

fatal error C1083: Cannot open include file: 'zlib.h': No such file or directory

fatal error C1083: Cannot open include file: \'zlib.h\': No such file or directory 为什么会出这种错误,…

查看全部问答>

射频电路板设计技巧

射频电路板设计技巧…

查看全部问答>

发帖纪念一下现代计算机之父——阿兰·图灵

今天闲来无事,在家看一本介绍二战期间密码破译的书,在看到有关图灵贡献一段时,突然意识到昨天是这位现代计算机之父的忌日,特发此帖纪念这位伟大的天才。下面是拜读百度上有关图灵的介绍:【概述】阿兰·麦席森·图灵(Alan Mathison& ...…

查看全部问答>

【讨论】用单片机开发产品的几点体会

以下见解纯属一家之言,本来是写给自己的,但是看到本 BBS 中不少兄弟热心助人,受到感染,故将其贴出。希望能起到抛砖引玉的作用。 谬误及其它不妥之处,还望兄弟们提出指正。 用单片机开发产品的几点体会 1、用户需求 必须明确认识到作产品开 ...…

查看全部问答>

请问LPM0和LPM1区别

请问下各位: 本人用DCO倍频至8M, LPM0: MCLK OFF, SMCLK ON, ACLKON, DCO ON LPM1: MCLK OFF, SMCLK ON, ACLK ON, DCO ON(DCO用于MCLK和SMCLK) (1)不知两者到底有何区别,LPM1下是否会影响TIMER1(时钟选择为SM ...…

查看全部问答>