zig寄存器

    技术2022-07-14  75

    LED灯初始化:    1.设置为GPIO口 (P1SEL)    -----Port1 Function Select         2.定义输出 (P1DIR)        -----Port1 Direction              按键中断初始化:    1.按键设置为GPIO口(P1SEL&=~0x07)    -----Port1 Function Select         2.定义为输入(P1DIR&=~0x04)        -----Port1 Direction                  3.为所有的端口P1设置“上拉/下拉模式”(P2INP&=~0x40)    -----Port2 Input Mode         4.将P1_2设置为“上拉”(P1INP&=~0x04)        -----Port1 Input Mode         --------------------------------------------         5.打开所有中断EA=1         6.打开P1中断源(IEN2|=0x10)            -----Interrupt Enable 2         7.为具体端口P1_2打开中断(P1IEN|=0x04)        -----Port1 Interrupt Mask         8.为P1_2设置触发方式(PICTL|=0x02)        -----Port Interrupt Control         9.#pragma vector=P1INT_VECTOR         __interrupt void P1_ISR(void)         {             判断是否对应位有中断(P1IFG&0x04)    -----Port1 Interrupt Status Flag             {                 //程序             }             P1IF=0x00;  清空端口中断标志位             P1IFG=0x00;         }

    定时器中断:    1.设置时钟 CLKCONCMD &=0x80;      //设置晶振为32MHZ                     //等待晶振稳定         2.设置定时器1模式和分频(T1CTL|=0x05)        -----Timer1 Control    (公式:分频/32000000*64000*次数=要的时间)         3.使能定时器1溢出中断(TIMIF|=0x40)            -----Timer Interrupt Mask/Flag         4.打开定时器1中断   IEN1(T1IE=1)        -----                 ---------------------------------------------------------                 5.#pragma vector=T1_VECTOR         __interrupt void T1_ISR(void)         {             //程序         } 串口配置:    1.设置时钟 CLKCONCMD &=0x80;      //设置晶振为32MHZ               while(CLKCONSTA & 0x40);    //等待晶振稳定         2.设置外设控制(PERCFG=0x00)  //设置UART0的备用位置1.参考书127页         3.端口选择外设 (P0SEL|=0x3C)       //设置P0端口模式 //仅需要设置4个口。参考127页         4.端口0的外设优先级控制(P2DIR&=~0xC0)     //将USART0排到最前         5.USART寄存器调为UART模式和打开接收 (U0CSR=0xC0)         6.波特率控制(书130页)         (U0GCR) (U0BAUD)         7.接收中断清零  :(URX0IF=0)         8.IEN0=0x84;(打开EA总中断和UART0接收中断)         ------------------------------------------------------         发送函数         void usart_tx_string(char *data,int len)         {             unsigned int j;             for(j=0;j<len;j++)             {                 U0DBUF=*data++;                 while(UTX0IF==0);                 UTX0IF=0;             }         }         接收中断         #pragma vector=URX0_VECTOR         __interrupt void UART0_RX_ISR(void)         {             URX0IF=0;             temp=U0DBUF;         }         ---------------------------------------------------------         void main()         {             if(temp!='#')             else             {                 U0CSR&=~0x40; //UART禁止接收

                    //程序

                    U0CSR|=0x40; //UART允许接收             }         }

    ADC模模式:    ADC初始化:         AVDD5引脚、128抽取率、通道0 (ADCCON3=0x90);             -----ADC Control 3         等待转换完毕,一旦设置上面这个语句便会启动转换,所以要等待while(!ADCIF);         赋值高字节 value=ADCH              字节左移动 value=value<<8         赋值低字节或不覆盖 value|=ADCL         -------------------------------------------------------         定时器初始化:         CLKCONCMD&=0x80;         定时器1 128分频、模模式(T1CTL|=0x0E)             定时器1,通道0比较模式 T1CCTL0|=0x04;         T1通道0低字节( T1CC0L=50000&0x00ff)            T1通道0高字节T1CC0H=(50000&0xff00)>>8         50000--一次溢出200ms--公式:32000000/分频*溢出(单位秒)=所要溢出秒的次数  

    Processed: 0.014, SQL: 9