bbxyliyang01

  • 2019-12-06
  • 回复了主题帖: STC15W204S单片机为啥外部中断0不能进入,求教,串口中断可以发送数据

    chunyang 发表于 2019-12-6 18:07 总中断、外中断0都使能,中断模式根据需要选沿触发或电平触发,编程没问题话,一定会响应。
    您说的这些我还真都配置了,就是不响应!

  • 回复了主题帖: STC15W204S单片机为啥外部中断0不能进入,求教,串口中断可以发送数据

    huo_hu 发表于 2019-12-6 18:44 P5.5做不了外中断,你再看看书,只有特定的管脚可以
    我用的也不是P55,P32,P33,P55是一个按键输入。

  • 回复了主题帖: STC15W204S单片机为啥外部中断0不能进入,求教,串口中断可以发送数据

    chunyang 发表于 2019-12-6 15:17 代码有问题,外中断0要配置成有效,总中断使能也要有效。
    您好,我配置了开中断,请教哪里还需要配置?

  • 发表了主题帖: STC15W204S单片机为啥外部中断0不能进入,求教,串口中断可以发送数据

    #include "config.h" #include "delay.h" #include "uart.h" unsigned int INT0_cnt=0, INT1_cnt=0; //测试用的计数变量 sbit key=P5^5; /************* 功能说明 ************** ******************************************/ /************* 本地常量声明 **************/ /************* 本地变量声明 **************/ /************* 本地函数声明 **************/ /*************  外部函数和变量声明 *****************/ /******************** IO配置函数 **************************/ void GPIO_config(void) { P5M1 = 0x40;   //设置准双向口 P5M0 = 0x00; P0M1 = 0; P0M0 = 0; //设置为准双向口 P1M1 = 0; P1M0 = 0; //设置为准双向口 P2M1 = 0; P2M0 = 0; //设置为准双向口 P3M1 = 0; P3M0 = 0; //设置为准双向口 P4M1 = 0; P4M0 = 0; //设置为准双向口 P5M1 = 0; P5M0 = 0; //设置为准双向口 P6M1 = 0; P6M0 = 0; //设置为准双向口 P7M1 = 0; P7M0 = 0; //设置为准双向口 } /******************** 主函数 **************************/ void main(void) { int count = 0; GPIO_config(); UartInit(); INT0_cnt = 0; INT1_cnt = 0; IE1  = 0; //外中断1标志位 IE0  = 0; //外中断0标志位 EX1 = 1; //INT1 Enable EX0 = 1; //INT0 Enable IT0 = 1;  //INT0 下降沿中断   // IT0 = 0;  //INT0 上升,下降沿中断  IT1 = 1;  //INT1 下降沿中断   // IT1 = 0;  //INT1 上升,下降沿中断  EA = 1;  //允许总中断 while(1) {         SendData(1+0x30);    if(INT0_cnt >= 65536)     INT0_cnt = 0;    if(key==0)    {     delay_ms(10);     if(key==0)     {           while(!key);      SendData(INT1_cnt/10000+0x30);      SendData(INT1_cnt%10000/1000+0x30);      SendData(INT1_cnt%10000%1000/100+0x30);      SendData(INT1_cnt%10000%1000%100/10+0x30);      SendData(INT1_cnt%10+0x30);      SendString("\r\n");      INT1_cnt=0;           }        }     } } /********************* INT0中断函数 *************************/ void INT0_int (void) interrupt 0  //进中断时已经清除标志 { EX0=0; INT0_cnt++; //中断+1 EX0=1; } /********************* INT1中断函数 *************************/ void INT1_int (void) interrupt 2 //进中断时已经清除标志 { EX1=0; INT1_cnt++; //中断+1 } /*********************************************************/ //#define MAIN_Fosc  22118400L //定义主时钟 //#define MAIN_Fosc  12000000L //定义主时钟 #define MAIN_Fosc  11059200L //定义主时钟 //#define MAIN_Fosc   5529600L //定义主时钟 //#define MAIN_Fosc  24000000L //定义主时钟 #define BaudRate1 9600UL #define Timer2_Reload (65536UL-(MAIN_Fosc/4)/BaudRate1) /*********************************************************/ #include "uart.h" void UartInit(void)  [url=]//9600bps@11.0592MHz[/url] { SCON = 0x50;                //8位可变波特率 AUXR&=~(1<<4);   AUXR|=0x10;  AUXR|=(1<<2); T2H =(u8)(Timer2_Reload>>8); T2L=(u8)(Timer2_Reload); AUXR|=(1<<4);  //启动 REN=1; ES=1;EA=1; } /*---------------------------- 发送串口数据 ----------------------------*/ void SendData(unsigned char ch) {      SBUF = ch;                 //写数据到UART数据寄存器   while(TI == 0);    TI = 0; } /*---------------------------- 发送字符串 ----------------------------*/ void SendString(char *s) {      while (*s)                  //检测字符串结束标志     {          SendData(*s++);         //发送当前字符     } }

  • 2019-10-24
  • 发表了主题帖: 求助,proteus仿真里面怎么仿真声控电路?求指导,谢谢

    求助,proteus仿真里面怎么仿真声控电路?求指导,谢谢

  • 2019-10-15
  • 回复了主题帖: 开启学习PIC之路,记录学习的点点滴滴,与大家分享

      第三天 定时器的学习 3.1 定时/计数器功能 3.1.1定时功能 所谓定时功能就是通过来自单片机内部的时钟脉冲作计数脉冲,使计数器计数,即每个机器周期计数器加1,计数值达到予置值后,定时/计数模块产生溢出。 3.1.2计数器功能 所谓计数是指对外部事件进行计数。外部事件的发生以输入脉冲表示,因此计数功能的实质就是对外来脉冲进行计数。 3.2定时器应用的方法 在单片机中,每一个中断源都有一个相应的中断标志位,该中断标志将占据中断控制寄存器的一位,该中断标志位置1,就意味着有中断信号产生并向MCU申请中断,但这不代表MCU一定响应该中断。响应一个中断请求的条件: 响应A中断=全局中断允许标志(由用户软件设置)AND中断A允许标志位(由用户软件设置)AND中断A标志位(由用户软件设置或者符合中断条件时由硬件自动设置)。 我们今天的目的就是学习PIC单片机定时器0,实现让LED灯每隔1S亮一次。 接下来我们分析一下,指令周期就是单片机执行一个指令所花费的时间。这也是定时器定时的最小时间单位。时钟频率/4=指令频率。1/指令频率=指令周期。假设现在的时钟是4MHZ  ,4MHz的时钟经过4分频后变成了 1MHz 其周期为0.0000001s也就是1us,这个1us就是指令周期,这1us也就是定时器定时的最小单位。 1、定时器与预分频器 假设在没有预分频器情况下。开启定时器 每隔一个指令周期定时器就加一。假设时钟是4MHz  也就是每隔 1us 定时器加一。如果有了预分频器假设预分频器设置成2分频,定时器就 每隔2个指令周期定时器加一。如果预分频器设置成4分频,定时器就 每隔4个指令周期定时器加一,以此类推。 2、定时器中断标志位 如: TMR0 这个是8位的定时器,也就是8位的寄存器。8位的寄存器能代表的数值为0~255.也就是说定时器可以从0开始加一直加到255.到255后再加一就又变成0。此时TMR0定时器中断标志位 (TMR0IF)变成 1.(如果中断没有开启,并不执行中断程序。) 3、实例说明:    假设时钟周期为4MHZ,每隔1秒点亮LED,每1秒灭掉LED。这样的程序要如何做到呢。   1、得到指令周期  4MHz/4=1MHz       1/1MHz=0.0000001s=1us   2、得到预分频      定时器定时的最大时间=预分频*256。256X256=65536us=65.536ms 这里面我们选择50ms。  3、计算定时器初始值=(定时器最大值+1)-(定时时间/预分频)。      255+1=256 50000/256=195.3125      256-195.3125=60.6875 四舍五入,定时器初始值为61 接下来我们就要开始编程,编程之前,我们讲下,几个重要的寄存器。   #include " pic.h" //********************函数定义*********************   //*************** 主程序 ******************** void main(void) {     PSA=0;    //PSA等于0,分频   PS0=1;   PS1=1;   PS2=1;   T0CS=0;    //设为定时方式   TMR0=61;   //设定定时初值       GIE=1;     //总中断允许   T0IE=1;    //TMR0中断允许   TRISC=0;      //PORTC设置为输出   PORTC=0x0ff;  //PORTC输出1   while(1)   {    } }   //*********************中断服务程序****************** void interrupt isr(void) {  static uint tmr0_count=0;  if(T0IE&&T0IF)     //判断是否为TMR0中断   {     T0IF=0;     //清TMR0中断标志位(必须用软件清零)     TMR0=61;    //TMR0重新赋初值     if(++tmr0_count>=20)  //定时20次,就是1秒     {       tmr0_count=0;       PORTC=~PORTC;           }   } }

  • 2019-10-13
  • 回复了主题帖: 开启学习PIC之路,记录学习的点点滴滴,与大家分享

    第二天开始第一个程序 今天的任务,点亮一个LED,和编写一个流水灯程序。我们直接进入主题,先介绍下PIC单片机I/O口,I/O端口的寄存器复位后,默认为输入(输出高阻态),每一路I/O有方向控制寄存器TRISA~E和数据寄存器PORTA~E,为了实现I/O端口的功能必需先对端口进行初始化设置。 方向控制寄存器与数据寄存器都是8位的,方向控制寄存器中的每一位与数据寄存器中的每一位相对应;方向控制寄存器的相应位设置为1表示输入;设置为0表示输出;端口控制寄存器的相应位设置为1表示输出高电平,设置为0表示输出低电平。 这个需要我们记住。通用I/O接口的输出设计要点:1、输出电平的转换和匹配,我们PIC系统一般工作电源是5V,当连接的外围是9V、12V等于5V不同的电源时,需要考虑输出电平的转换。2、输出电流的驱动能力,每个I/O口允许最大25mA的灌电流和20mA的拉电流,可以直接驱动LED和继电器。因各端口结构不同,RB口提供的总灌电流和总拉电流可达150mA和100mA;其他端口为80mA和50mA;五个端口驱动电流之和不大于200mA。3、输出电平转换的延时,PIC单片机是一款高速单片机,当系统晶振为4MHZ时,执行一个指令的时间为0.25us,也就是说讲一个I/O置1,在置0,只需要0.25us。         LED发光二级管电流硬件设计:二极管电流大于5MA,人眼睛就可以明显的观察到二极管的发光,导通电流越大,亮度越高。但最好不要超过10ma,否则可能会将二级管烧坏或IO口烧坏。我们在设计电路时,需要在电路中串接一个限流电阻,这个电流一般在330-1K之间。         软件设计,代码如下: #include<pic.h> //头文件包含 //芯片配置字定义 #pragma config FOSC = XT        // Oscillator Selection bits (XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN) #pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register) #pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled) #pragma config MCLRE = ON       // RE3/MCLR pin function select bit (RE3/MCLR pin function is MCLR) #pragma config CP = OFF         // Code Protection bit (Program memory code protection is disabled) #pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled) #pragma config BOREN = ON       // Brown Out Reset Selection bits (BOR enabled) #pragma config IESO = ON        // Internal External Switchover bit (Internal/External Switchover mode is enabled) #pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is enabled) #pragma config LVP = ON         // Low Voltage Programming Enable bit (RB3/PGM pin has PGM function, low voltage programming enabled) #pragma config BOR4V = BOR40V   // Brown-out Reset Selection bit (Brown-out Reset set to 4.0V) #pragma config WRT = OFF        // Flash Program Memory Self Write Enable bits (Write protection off) void main() { //   TRISC=0xfe;//11111110,端口操作 //   PORTC=0xfe;//00000001    TRISC0=0;//位操作,类似51单片机sbit    RC0=0;    while(1); } 实验效果如下: 流水灯程序如下: #include<pic.h> #define uchar unsigned char #define uint  unsigned int #pragma config FOSC = XT        // Oscillator Selection bits (XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN) #pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register) #pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled) #pragma config MCLRE = ON       // RE3/MCLR pin function select bit (RE3/MCLR pin function is MCLR) #pragma config CP = OFF         // Code Protection bit (Program memory code protection is disabled) #pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled) #pragma config BOREN = ON       // Brown Out Reset Selection bits (BOR enabled) #pragma config IESO = ON        // Internal External Switchover bit (Internal/External Switchover mode is enabled) #pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is enabled) #pragma config LVP = ON         // Low Voltage Programming Enable bit (RB3/PGM pin has PGM function, low voltage programming enabled) #pragma config BOR4V = BOR40V   // Brown-out Reset Selection bit (Brown-out Reset set to 4.0V) #pragma config WRT = OFF        // Flash Program Memory Self Write Enable bits (Write protection off) void delay_ms(uint x) {          uint a,b;          for(a=x;a>0;a--)                    for(b=110;b>0;b--); } void main() {          uchar position=0;          TRISC=0x00;//设置为输出方式          while(1)          {                    PORTC=~(1<<postion);                    if(++position>=8)      postion=0;                    delay_ms(1000);          } }    

  • 2019-10-12
  • 发表了主题帖: 开启学习PIC之路,记录学习的点点滴滴,与大家分享

    本帖最后由 bbxyliyang01 于 2019-10-12 21:19 编辑 第一天PIC单片机编译环境的安装   网上关于PIC单片机的入门或者学习资料相对较少,不像STM32、AVR或者51单片机那样丰富,所以我记录下我学习PIC单片机的点点滴滴,与大家共享下,技术在于交流,如我写的错误的地方,希望大家指正。   来介绍一下我所使用的平台信息、调试工具。   PIC单片机型号:PIC16F887   开发环境:MPLAB X IDE v3.30   下载工具:PIC Kit 3.5   一、 安装开发环境   我是直接在官网(www.microchip.com)上下载的MPLAB X IDE v3.30版本,400多兆,应该是最新版本了,安装过程中使用推荐选项就可以,还安装了一个XC8编译器(XC8_V1.31破解版)。如果大家需要软件,可以联系我们震撼科技工作室,QQ 515580142,我们可以把软件发给你。给大家介绍下我们震撼科技工作室,我们是几个刚大学毕业大学生创立,主要承接各种单片机设计制作,如原理图设计、电路板PCB绘制、单片机程序代写、实物制作等相关软硬件开发。   二、 新建项目   1、我安装开发环境的时候,选择了中文版本,进入开发环境后,点击:文件->新建项目,弹出如下界面:选择独立项目,然后点下一步。   步骤一   2、点击下一步后弹出如下界面:选择你使用的单片机型号,这里我使用的是PIC16F887单片机。   步骤二   3、继续点下一步,这里选择调试/下载工具,我使用的是PICkit3。   步骤三   4、下一步,这一步选择的是编译器,选择XC8编译器。   步骤四   5、最后一步,选择项目的保存目录,编码这里选择的是GB2312,这样做的目的是使项目中的中文字符能够被识别,否则,添加中文注释时会出现乱码。   步骤五   6、至此,项目新建完毕,界面如下,项目目录里面,我们目前只需要关注头文件和源文件即可,在头文件上右键可以选择添加现有的头文件,源文件同理。   7、文件添加完成后,点击编译按钮 进行编译,编译通过后会在环境下方提示编译信息,  8、 编译成功后,可以进行下载和在线调试,下载按钮 用于将程序下载到单片机内部,调试按钮 用于在线调试程序,注意,点击调试按钮程序不会下载到单片机内。   注意接下来以测试程序来讲解这款单片机的使用,在此之前先来了解一下《配置位》,在开发环境中,点击运行窗口->PIC存取器视图->配置位,即可在环境下方调出配置窗口,Option下面的定义可以修改,     这里说一下时钟配置和看门狗配置,FOSC用于配置系统时钟,WDTE用于看门狗的配置,如果你想使用外部晶振就选择XT即可,同理,看门狗的开启和关闭,以及开启后的设置也可以通过WDTE来配置,这里我们选择关闭看门狗,只需将WDT选项选择为OFF即可,注意,这里选择好之后,必须点击输出生成源代码,会自动生成源码,生成的源码拷贝到你的项目文件中才有效。   至于一些详细的配置请自行参见手册。     生成代码  

  • 2019-10-11
  • 发表了主题帖: PIC单片机用蜂鸣器播放歌有人做过吗?分享下,谢谢

    PIC单片机用蜂鸣器播放歌有人做过吗?分享下,谢谢

  • 发表了主题帖: 2路ADC0808测量数码管显示汇编程序

    2路ADC0808测量电压,通过按键切换,仿真加程序!   LED1  EQU  31H LED2  EQU  32H LED3  EQU  33H         ADC   EQU  35H   BIAOZHI  EQU 36H ST    BIT  P3.2  EOC   BIT  P3.3 OE    BIT  P3.1               ORG   00H        SJMP   START                ORG   0BH   MOV BIAOZHI,#00H START:  MOV   P3,#0FFH             MOV   LED1,#00H         MOV   LED2,#00H         MOV   LED3,#00H            MOV   DPTR,#TAB     JB P3.7,MAINNOKEY         //检测到按键      LCALL SETCHANNEL   SETCHANNEL:          //通道切换子函数 LCALL DELAY5MS   //去抖动流程 JB P3.7,SETCHANNELEND JNB P3.7,$     //等待松开按键 MOV A,BIAOZHI CPL A MOV BIAOZHI,A    SETCHANNELEND: RET      MAINNOKEY:MOV   R4,#250        MOV    R5,#250 WAIT:          MOV A,BIAOZHI           CJNE A,#00,WAIT2    SETB P3.0            CLR   ST        SETB   ST         CLR   ST                   JNB   EOC,$               SETB   OE                   MOV   ADC,P1               CLR   OE                   MOV   A,ADC         MOV   B,#51             DIV   AB         MOV   LED3,A               MOV   A,B         MOV   B,#5         DIV   AB         MOV   LED2,A                 MOV   LED1,B                LCALL   DISP        LJMP   START         // DJNZ   R4,WAIT WAIT2:  CLR P3.0                  CLR   ST        SETB   ST         CLR   ST                    JNB   EOC,$               SETB   OE                 MOV   ADC,P1              CLR   OE                   MOV   A,ADC         MOV   B,#51             DIV   AB         MOV   LED3,A              MOV   A,B         MOV   B,#5         DIV   AB         MOV   LED2,A              MOV   LED1,B             LCALL   DISP            // DJNZ   R5,WAIT2         LJMP   START                         DISP: MOV   A,#03EH       CLR   P2.3           MOV   P0,A       LCALL   DELAY       SETB    P2.3             MOV   A,LED1       MOVC   A,@A+DPTR       CLR   P2.2       MOV   P0,A        LCALL   DELAY       SETB    P2.2            MOV   A,LED2       MOVC   A,@A+DPTR       CLR   P2.1       MOV   P0,A        LCALL   DELAY       SETB    P2.1            MOV    A,LED3       MOVC    A,@A+DPTR       CLR    P2.0       ORL    A,#80H       MOV    P0,A        LCALL   DELAY       SETB    P2.0              RET      DELAY:  MOV    R6,#10            D1:  MOV    R7,#250        DJNZ    R7,$        DJNZ    R6,D1         RET DELAY5MS:  PUSH 0X06 PUSH 0X07 MOV R6,#0c4H  DL1: MOV R7,#0CH DL2: DJNZ R7,DL2 DJNZ R6,DL1 POP 0X07 POP 0X06 RET TAB:DB 3FH,06H,5BH,4FH,66H     DB 6DH,7DH,07H,7FH,6FH       END

  • 回复了主题帖: max30100血氧的程序

    加我QQ515580142,我有这个资料

  • 回复了主题帖: 【T叔藏书阁】PIC单片机系列

    感谢分享,谢谢

最近访客

< 1/1 >

统计信息

已有1人来访过

  • 芯币:24
  • 好友:--
  • 主题:5
  • 回复:7
  • 课时:--
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言