tag 标签: pic16f877a

相关博文
  • 热度 14
    2013-4-15 08:43
    2155 次阅读|
    0 个评论
      #include 16F877A.h #device adc=8   #FUSES NOWDT                    //No Watch Dog Timer #FUSES HS                       //High speed Osc ( 4mhz) #FUSES NOPUT                    //No Power Up Timer #FUSES NOPROTECT                //Code not protected from reading #FUSES NODEBUG                  //No Debug mode for ICD #FUSES NOBROWNOUT               //No brownout reset #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O #FUSES NOCPD                    //No EE protection #FUSES NOWRT                    //Program memory not write protected   #use delay(clock=20000000) #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)   #define OP_WRITE  0xa0 #define OP_READ   0xa1   #define EEPROM_SCL  PIN_C0 #define EEPROM_SDA  PIN_C1   #bit SCL= 0x07.0 #bit SDA= 0x07.1   #bit SCLIO=0x87.0 #bit SDAIO=0x87.1   void start() {    SCLIO=0;delay_us(15);    SDA=1;delay_us(15);    SCL=1;delay_us(15);    SDA=0;delay_us(15);    SCL=0;delay_us(15); } void stop() {    delay_us(15);    SDA=0;delay_us(15);    SCL=1;delay_us(15);    SDA=1;delay_us(15); }   /* 函数功能:读取数据 出口参数:read_data */ unsigned char shin() {    unsigned char i, read_data;    //设数据脚为输入     SDAIO=1;    delay_us(15);        for(i=0;i8;i++)    {       delay_us(15);       SCL=1;       delay_us(15);       read_data=1;       if(SDA==1)       read_data=read_data+1;       delay_us(15);       SCL=0;    }    //设数据脚为输出     SDAIO=0;    return(read_data); } /* 函数功能:写入数据 入口参数:write_data */ unsigned char shout(unsigned char write_data) {    unsigned char i;    unsigned char ack;    //设数据脚为输出     SDAIO=0;        for(i=0;i8;i++)    {       if(write_data 0x80)  SDA=1;       else                   SDA=0;       delay_us(15);       SCL=1;       delay_us(15);       SCL=0;       delay_us(15);       write_data =1;    }    delay_us(15);    SDA=1;    delay_us(15);    SCL=1;        //设数据脚为输入     SDAIO=1;    delay_us(15);    ack=SDA;    SCL=0;    delay_us(15);    //设数据脚为输出     SDAIO=0;    return ack; }   /* 函数功能:向指定地址读数据 入口参数: random_addr */ unsigned char read_random(unsigned char random_addr) {    unsigned char read_data;    start();    shout(OP_WRITE);    //shout(0);    shout(random_addr);    start();    shout(OP_READ);    read_data=shin();    stop();    return(read_data); }     /* 函数功能:向指定地址写数据 入口参数: addr , write_data */ void write_byte(unsigned char addr,unsigned char write_data) {       start();    shout(OP_WRITE);    //shout(0);    shout(addr);    shout(write_data);    stop();    delay_ms(15); }     void init_ext_eeprom()  {    output_float(EEPROM_SCL);    output_float(EEPROM_SDA); } char BUFER; #int_rda                    //RS232 接收到的数据有用, 指定下面的函数是一个中断函数  void serial_isr()  {        BUFER=getc();    //putc(BUFER);    write_byte(0x01,BUFER);    //delay_ms(50);    putc (read_random(0x01) );   }      #INT_RTCC void clock_isr() {    SET_RTCC(1500);//20MHz  32分频,初值 0,刚好 1.64 mS 中断一次    //SET_RTCC(500);//20MHz  32分频,初值 0,刚好 166  uS 中断一次    //SET_RTCC(1500);//20MHz  32分频,初值 0,刚好 236  uS 中断一次    //output_toggle(PIN_B0); } void main() {    setup_adc_ports(NO_ANALOGS);    setup_adc(ADC_OFF);    setup_psp(PSP_DISABLED);    setup_spi(FALSE);    //setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32 |RTCC_8_BIT);    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32 );                          //设置Timer0 的时钟源为内部时钟源                          //每隔256 个脉冲,TMR0 计数 1 次                          //RTCC_8_BIT 设置Timer0 为8 位定时器方式;                          //RTCC_DIV_1 为 288 uS                          //RTCC_DIV_2 为 544 uS                          //RTCC_DIV_4 为 1.056 mS                          //RTCC_DIV_8 为 2.080 mS                          //RTCC_DIV_16 为 4.10 mS                          //RTCC_DIV_32 为 8.20 mS                              SET_RTCC(0);        setup_timer_1(T1_DISABLED);    setup_timer_2(T2_DISABLED,0,1);    setup_comparator(NC_NC_NC_NC);    setup_vref(FALSE);    enable_interrupts(int_rda);     //enable_interrupts(INT_RTCC);    enable_interrupts(GLOBAL);    // TODO: USER CODE!!    //set_tris_c(0);            //init_ext_eeprom();    write_byte(0x00,'0');delay_ms(10);    write_byte(0x01,'1');delay_ms(10);    write_byte(0x02,'2');delay_ms(10);    write_byte(0x03,'3');delay_ms(10);    write_byte(0x04,'4');delay_ms(10);    write_byte(0x05,'5');delay_ms(10);    write_byte(0x06,'6');delay_ms(10);    write_byte(0x07,'7');delay_ms(10);    write_byte(0x08,'8');delay_ms(10);    putc (read_random(0x01) );delay_ms(10);    putc (read_random(0x02) );delay_ms(10);    putc (read_random(0x03) );delay_ms(10);    putc (read_random(0x04) );delay_ms(10);    putc (read_random(0x05) );delay_ms(10);    putc (read_random(0x06) );delay_ms(10);    putc (read_random(0x07) );delay_ms(10);    putc (read_random(0x08) );delay_ms(10);    while(1)    {        //printf("Freemark!\r\n");delay_ms(1000);        //write_byte(0x02,0xaa);    } }
相关资源
  • 所需E币: 1
    时间: 2023-4-26 19:01
    大小: 374.17KB
    上传者: 张红川
    基于pic16f877a单片机的ht1621液晶显示控制器.pdf
  • 所需E币: 1
    时间: 2023-3-28 13:27
    大小: 310.82KB
    上传者: 张红川
    基于PIC16F877A单片机软件环分的步进电机控制系统.pdf
  • 所需E币: 1
    时间: 2021-4-22 14:48
    大小: 583.67KB
    上传者: zendy_731593397
    该文档为PIC16F877A开发的源代码,主要有8个程序的源代码,分别如下001_位定义输出002_口定义输出003_基本输入输出004_闪烁灯005_流水灯006_数码管静态显示007_数码管动态显示008_4×4矩阵式键盘识别
  • 所需E币: 3
    时间: 2019-12-28 21:44
    大小: 309.47KB
    上传者: wsu_w_hotmail.com
    介绍了一种新型的加速度传感器性能测试系统,它由计算机分析平台、数据采集子系统、数据交换子系统和直流调速子系统四个部分组成.系统通过串口控制直流调速系统改变转盘的速度从而获得变化的加速度曲线,再通过射频芯片nRF2401进行相应的数据采集.上位机采用LabVIEW开发,其他3个子系统采用PIC单片机作为主控芯片实现.测控技术与仪器仪表MeasurementControlTechnologyandInstruments一种新型加速度传感器性能测试系统李建奇1’2,资道周2(1.湖南文理学院电气系,湖南常德415003;2.湖南大学电气,与信息工程学院,湖南长沙410082)摘要:介绍了一种新型的加速度传感器性能测试系统,它由计算机分析平台、数据采集子系统、数据交换子系统和直流调速子系统四个部分组成。系统通过串口控制直流调速系统改变转盘的速度从而获得变化的加速度曲线,再通过射频芯片nRF2401进行相应的数据采集。上位机采用LabVIEW开发,其他3个子系统采用PIC单片机作为主控芯片实现。关键词:加速度传感器;数据采集;射频通信;LabVIEW……
  • 所需E币: 4
    时间: 2019-12-24 21:19
    大小: 369.59KB
    上传者: 微风DS
    ThisapplicationnotedescribeshowtouseaPIC16F877AasanI2C™mastertocommunicatewiththeMicrochipMCP23016I2CI/OExpanderslavedevice.AnI/OExpanderdeviceisusedtoincreasetheI/Ocapabilityofamicrocontroller(refertoFigure1).Amicrocontroller’sI2Cportcanbeusedasacommuni-cationchannelwithMCP23016(s)toexpandthemicro-controller’sI/Ocount.ByusingtwoI2Cpins(andonegeneral-purposeI/Opin,ifusingtheinterruptcapabilityoftheMCP23016),16to128general-purposeI/Oscanbegained.TheMCP23016hasthreeaddresspinswhichcanbeusedtoprovideuniqueaddressesforuptoeightdevices.EachdeviceattachedtotheI2Cbusmustbeassignedauniqueaddressunlessalldevices(withthesameaddress)arereceivingthesamedataanddonottrans-mitanydata.Whenthemasterinitiatesadatatransfer,theaddressoftheslavedeviceistransmitted.Withintheaddress,theLSb(R/Wbit)specifieswhetherthemasterreadsfrom,orwritesto,theslave.Forwriteoperations,aseriesofbyteswouldbetransmittedfromthemaster.Forreadoperations,themasterwaitsforthebustobefree(i.e.,SCLlinenotpulledlow)andthenclocksthedatatobereceivedfromtheslave.MAN245InterfacingTheMCP23016I/OExpanderWithThePIC16F877AWhatcanyoudowithanI/OExpander?Author:AbdelwahabFassi-FihriMicrochipTechnologyInc.AnI/OExpandercanalsobeusedtomonitorswitchesand/orsensors,driveLEDsand/orrelays,aswellasothergeneral-purposeI/Ofunctions.AnI/OExpanderINTRODUCTIONcanhaveseveralusesinavarietyofapplications.Typ-This……