历史上的今天
返回首页

历史上的今天

今天是:2025年03月10日(星期一)

正在发生

2020年03月10日 | PIC16F690 最简单的实例

2020-03-10 来源:eefocus

RA4 RA5 接SW2 SW1按键


RB7接LED


delay.c


#include "delay.h"




void


DelayMs(unsigned char cnt)


{


#if XTAL_FREQ <= 2MHZ


do {


DelayUs(996);


} while(--cnt);


#endif




#if    XTAL_FREQ > 2MHZ


unsigned char i;


do {


i = 4;


do {


DelayUs(250);


} while(--i);


asm("clrwdt");


} while(--cnt);


#endif


}




delay.h




#ifndef XTAL_FREQ


#define XTAL_FREQ 4MHZ /* Crystal frequency in MHz */


#endif




#define MHZ *1000L /* number of kHz in a MHz */


#define KHZ *1 /* number of kHz in a kHz */




#if XTAL_FREQ >= 12MHZ




#define DelayUs(x) { unsigned char _dcnt; /


  _dcnt = (x)*((XTAL_FREQ)/(12MHZ)); /


  while(--_dcnt != 0) /


  continue; }


#else




#define DelayUs(x) { unsigned char _dcnt; /


  _dcnt = (x)/((12MHZ)/(XTAL_FREQ))|1; /


  while(--_dcnt != 0) /


  continue; }


#endif




extern void DelayMs(unsigned char);




toppic.c






#include "pic16f685.h"


#include "toppic.h"


#include "delay.h"




//#define BYTE unsigned char 


//#define WORD unsigned int


#define uchar unsigned char


#define uint unsigned int


//typedef bit bool;


//typedef unsigned char uint8;


//typedef signed char int8;


//typedef unsigned int uint16;


//typedef signed int int16;


//typedef unsigned long uint32;


//typedef signed long int32;


uchar data_temp,spi_data;


uchar t;


uchar flash_data,flag_timesover;






/*toppic主板初始化函数*/


/*功  能:完成TOPPIC开发板初始化*/


/*参  数:无*/


/*返回值:无*/


/*


void toppic_init(void)


{


  /* toppic 引脚方向、输出初值定义 


//COL8=1;/*让8个LED的公共端接地,为点亮LED做好准备


//TRIS_COL8=0; 


PORTB=0X00;/*先熄灭所有LED


TRISB=0X00;/*设置D口为输出





// ADCON0 = 0x81;


 // ADCON1 = 0x38;


// PORTA = 0X20;


// TRISA=0X20;


//TRISA = 0x00;


PORTC=0X00;/*先熄灭所有LED


TRISC=0X00;/*设置D口为输出




PORTA=0X00;/*先熄灭所有LED


TRISA=0X00;/*设置D口为输出



}


*/


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


void ini(void)


{


OPTION=07;//00 = 定时器1:2分频器初始值= //07=定时器1:256分频器初始值



ANSEL=0;


ANSELH=0;



C1ON=0;C2ON=0; //关闭比较模块



  WPUA=0B00111111; //ENABLE  PORTA PULL-UP


  WPUB=0XFF; //ENABLE  PORTB PULL-UP


  


  IOCA = 0b00110000;//RA5 RA4 允许电平变化中断


  INTCON=0x11101000;//GIE=1;PEIE=1;T0IE=1;INTE=0;


//RABIE=1;TOIF=0;INTF=0;RABIF=0; //启动 TMR0 中断 //启动中断使能标志


 


TRISA= 0b00111111; //0x37;//0x07;


TRISB= 0b11110000; //0xf0;


TRISC= 0b00000111;//0x07;





PORTA=0;


PORTB=0;


PORTC=0;



clrwdt();


}




//*****************************times查询子程序,flag_timesover=1时,延时500MS。


void sub_times()


{


uchar i;


asm("clrwdt");


if (TMR0>121)


{


TMR0=0;


i++;


if(i>(flash_data*15))


{


flag_timesover=1;


i=0;


}


}


}


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


void Loop_hz()


{


sub_times();


if(flag_timesover==1)


{


flag_timesover=0;


if(flash_data!=0) //==0,没有键值,常亮


{


G_LED=!G_LED;


}


else


{


G_LED=0;


}


}


}


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


void Loop()


{


TRISB7 = 0 ;


// TRISA5 = 1 ;


// TRISA4 = 1 ;


while(1)


{


clrwdt();//asm("clrwdt");


flash_data=0;


// if(!SW1+!SW2+!SW3+!SW4+!SW5+!SW6+!SW7+!SW8+!SW9+!SW10==1) //所有的IO口,只能有一个为低电平


{



if(SW2==0)


{


//flash_data=1;


//RB7=1;//输出高电平//


   //LED_di(1);



}


if(SW1==0)


{


//flash_data=15 ;


//RB7 =1;


  //LED_da(1);


}


}


Loop_hz();


}



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


void SPI_init(void) //端口初始化子程序


{


    PIR1 = 0x00;            //    SSPIF=0;没有中断发生


    SSPCON = 0x30;        //主控方式,Fosc/4,CKP=1空闲时钟电平为高,SSPEN=1使能同步串行功能


    SSPSTAT = 0xC0;        //SMP=1    时序信号末尾采样输入数据,CKE=1时序信号上升沿发送数据


    TRISC = 0x00;            //SDO引脚为输出,SCK引脚为输输出,SDI引脚输出


}


void SPI_tx(unsigned char spi_data) //SPI发送数据子程序


{


    SSPBUF = spi_data;


   do


    {


        ;


    }while(!SSPIF);//等待产生SSP中断,等待发送完成


    SSPIF = 0;


    data_temp=SSPBUF;//将接受到的数据放在变量中


}


void LED_di(unsigned char t)


{


unsigned char i,j;


for (j=0;j<=t;j++)


for (i=0;i<=1;i++)//1 闪4次 2闪6次 3闪8次 4闪10次 5闪12次 6闪14次


{


RB7=1;/*输出高电平*/


DelayMs(500);/*调用500us延时函数*/


RB7=0;/*输出低电平*/


DelayMs(500);/*调用500us延时函数*/


}


}


void LED_da(unsigned char t)


{


unsigned char i,j;


for (j=0;j<=t;j++)


for (i=0;i<=0;i++)//1 闪4次 2闪6次 3闪8次 4闪10次 5闪12次 6闪14次


{


RB7=1;/*输出高电平*/


DelayMs(500);/*调用500us延时函数*/


RB7=0;/*输出低电平*/


DelayMs(500);/*调用500us延时函数*/


}


}


void interrupt ISR(void)


 


{


  if(RABIF == 1  ) //RA4 0b00010000 口电平变化中断发生


{


LED_di(1);


}


  else if (RABIF == 0 ) //此处无意义,留待以后


{


LED_da(1);


}


  else


{


  nop();


}


  RABIF=0;//清除中断标记


}  


toppic.h


/*常量的宏定义*/


#define ON  1


#define OFF 0


/* 相关引脚对应的特殊功能寄存器位的宏定义 */


#define G_LED RB7


#define SW1 RA5


#define SW2 RA4


#define clrwdt()    asm("clrwdt")


#define nop()       asm("nop")


/*相关函数的声明*/


void ini(void);//toppic主板初始化


void sub_times(void);


void Loop_hz(void);


void Loop(void);


void SPI_init(void);//端口初始化子程序


void SPI_tx(unsigned char spi_data); //SPI发送数据子程序


void LED_di(unsigned char t);


void LED_da(unsigned char t);


main.c


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


// 


// 


//


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


#include


#include


#include


#include "toppic.h"


#include "delay.h"


//__CONFIG(0x03F8C);


__CONFIG(WDTEN & PWRTEN & MCLREN & BOREN & IESODIS & FCMDIS & INTIO); 


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


void main()



GIE=0;/*关全局中断*/


ini();


RABIF=0;//PORTA/PORTB 电平变化中断标志位


RABIE=1;//允许PORTA/PORTB 电平变化


GIE=1;/*开全局中断*/


Loop();


}


推荐阅读

史海拾趣

Amecon Magnetics公司的发展小趣事

随着电子行业的快速发展,对高性能磁性材料的需求日益增长。Amecon Magnetics公司敏锐地捕捉到这一市场机遇,加大了在技术研发上的投入。通过不断的技术创新,公司成功开发出一系列具有高性能、高稳定性的磁性材料产品,满足了市场对于高质量磁性材料的需求,从而赢得了客户的信任和市场的认可。

ADLINK公司的发展小趣事

Amecon Magnetics公司成立于XXXX年,初始阶段主要专注于磁性材料的研发与生产。在创立初期,公司面临着资金短缺、技术挑战以及市场竞争激烈等多重困难。然而,创始人凭借对磁性材料领域的深刻理解和坚定信念,带领团队不断突破技术难题,逐步开发出具有竞争力的产品。

Arduino公司的发展小趣事

随着物联网和智能设备的兴起,Arduino平台在智能家居、智能农业、机器人等领域的应用越来越广泛。开发者们可以利用Arduino平台来设计和开发各种智能设备和应用,实现设备的互联互通和智能化控制。这些应用不仅提高了人们的生活质量,也推动了电子行业的进步和发展。

这五个故事展示了Arduino公司在电子行业中的发展历程和取得的成就。从最初的廉价微控制器解决方案,到如今的多样化主板和广泛应用,Arduino始终秉持着创新、开放和合作的精神,为电子行业的发展做出了重要贡献。

Doodle Labs公司的发展小趣事

Doodle Labs公司成立于2010年代初,由一群热衷于无线通信和物联网技术的工程师创立。在成立之初,公司就明确了自己的定位:专注于开发高性能、智能化的无线电技术产品,以满足日益增长的无人机和物联网设备的需求。通过不断的技术研发和创新,Doodle Labs成功推出了其首款智能无线电产品,为无人机提供了稳定、高效的通信解决方案。

ETI Systems公司的发展小趣事

ETI Systems深知人才是企业发展的核心竞争力。因此,公司一直注重人才培养和引进工作。通过建立完善的人才培养机制和激励机制,ETI Systems吸引了一批具有丰富经验和专业技能的优秀人才加入公司。同时,公司也积极为员工提供广阔的发展空间和良好的工作环境,让员工能够充分发挥自己的才能和创造力。这种重视人才的企业文化,为ETI Systems的长期发展提供了有力的人才保障。

AIC [Analog Intergrations Corporation]公司的发展小趣事

ETI Systems公司自创立之初,就专注于研发具有创新性的电子产品和解决方案。在公司发展的早期,它推出了一款高性能的无线通信设备,该设备采用了当时最先进的信号处理技术,极大地提升了数据传输的效率和稳定性。这一创新产品不仅帮助ETI Systems在市场上获得了良好的口碑,也引领了整个行业的技术发展方向。

问答坊 | AI 解惑

LCD的一点资料

本帖最后由 paulhyde 于 2014-9-15 08:54 编辑 大家好 这是我收集到的一些LCD的资料 希望对大家有用!  …

查看全部问答>

linux下i2c控制radio的问题

目前用ut6410想实现 radio的功能使用si47xx的模块 ut6410本身有提供i2c的接口和驱动 kernel linux2.6.24 硬件部份問題排除 有用示波器 sda sck脚位有讯号出来. 现在遇到的状况是想从user space透过i2c对si47xx丢cmd 但是write read回传都是-1 部 ...…

查看全部问答>

wince5.0 2440背光问题

背光代码 volatile S3C2440A_IOPORT_REG * v_pIOPregs= NULL; BOOL BacklightInitialize() {     BOOL    bRet = TRUE;     BL_PowerOn(TRUE);               & ...…

查看全部问答>

第三方控件如何部署到wince中,在运行时提示无法找到第三方控件的dll

第三方控件如何部署到wince中 在运行时提示无法找到第三方控件的dll…

查看全部问答>

晶振运行正常吗?

我用示波器测量了一下F149的PIN9,X1OUT波形,有一个在2V范围,幅度在0。2V左右的锯齿波,频率有26US左右。而在PIN52,X2OUT上没有波形。我LXT1上接得是32678HZ的晶振,X2上接得是8M晶振。 请问这样状态正常吗?…

查看全部问答>

【求助】msp430芯片RAM居然不能外扩??

msp430芯片RAM居然不能外扩??很郁闷,最近程序大了,需要大于2K的RAM了,可是msp430芯片RAM不能外扩,这个怎么办呢?课题做到一半,555555555555 谢谢各位,请出出主意!…

查看全部问答>

TinyOS在MSP430F2618+CC2520平台上移植交流

目前TinyOS还仅支持MSP430低端的MCU比如f1611,以及CC2420等射频芯片。针对MSP430高端系列单片机,以及TI推出的第二代射频芯片CC2520还未能支持 前段时间把TinyOS移植到了上述平台上,基本功能都已经实现,针对无线协议栈还需要进一步优化!希望有 ...…

查看全部问答>

关于CC2530串口中断接收的问题

CC2530串口中断接收的自定义缓存BUF最大可以定义多大? 我现在需要一个最少160字节的BUF存接收到的数据进行解析;但是定义buf[160]后用IAR编译总是提示IDATA空间不够;后来通过调节IAR-option -stack/heap 中的设置;但是最大也是只能设置到buf[135 ...…

查看全部问答>

用七段数码管显示26个字母的方案

一般来说,七段数码管(也有称日字管)只能显示10个阿拉伯数字和部分英文字母,但是,按排列组合来算,七段数码管可以有128个组合,因此,就七段数码管可包含的信息量来说,显示26个字母加10个数字共36个字符是没问题的,只是人们没有建立一套显示 ...…

查看全部问答>

CC2500发射很正常,但是接收的数据异常

做了块CC2500模块,模块发射数据很正常,但是接收的数据全部异常,找了两天了还没找到原因,程序问题已经排除(用别人的模块发射和接受都正常),请懂的人帮下小弟,小弟搞开始搞RF…

查看全部问答>