IEN0 |=0X84
时间: 2024-05-30 14:05:13 浏览: 102
IEN0 |= 0x84 是一条位操作指令,用于将 IEN0 寄存器的特定位设置为1。具体来说,0x84 是一个十六进制数,转换为二进制是 10000100。通过按位或操作(|),将 IEN0 寄存器的第7位和第2位设置为1,其他位保持不变。
相关问题:
1. IEN0 寄存器有什么作用?
2. 为什么要使用位操作指令来设置寄存器的特定位?
3. 还有哪些常用的位操作指令?
相关问题
void InitUart(uchar Ux,uchar GCR,uchar BAUD) { if(Ux == USART0) { //端口设置 PERCFG = 0x00; //备用位置1 SFR寄存器位PERCFG.U0CFG选择是否使用备用位置1 或备用位置 2。 P0SEL = 0x0c; //根据外设 I/O 引脚映射设置P0_2(接收),P0_3(发送)为外设引脚 1100 P2DIR &= ~0xc0; //USART0为第一优先级 1100 0000 //UART设置 U0CSR |= 0x80; //USART模式选择,设置为UART方式 1000 0000 7位描述:USART 0 控制和状态 U0GCR |= GCR; //GCR 11 BAUD 216 U0BAUD |= BAUD; //U0GCR的0-4位:波特率指数值 U0BAUD的0-7位:波特率小数部分的值 UTX0IF = 0; //UART0 TX传送中断标志初始置位0 U0CSR |= 0X40; //UART接收器使能。1: 接收器使能 0100 0000 IEN0 |= 0x84; //开总中断,接收中断 1000 0100 第2位描述:USART0 RX中断使能 第7位描述:1: 通过设置对应的使能位将每个中断源分别使能和禁止 } else if(Ux == USART1) { //端口设置 PERCFG = 0x00; //备用位置1 SFR寄存器位PERCFG.U0CFG选择是否使用备用位置1 或备用位置 2。 P0SEL |= 0x30; //根据外设 I/O 引脚映射设置P0_5(接收),P0_4(发送)为外设引脚 P2DIR |= 0x10; //USART1为第一优先级 //UART设置 U1CSR |= 0x80; //USART模式选择,设置为UART方式 1000 0000 7位描述:USART 0 控制和状态 U1GCR = GCR; U1BAUD = BAUD; //根据手册,设置波特率 UTX1IF = 0; //UART1 TX中断标志初始置位0 IEN0 |= 0x84; } }
这段代码是用于初始化UART通信的函数,根据传入的参数Ux的不同,来初始化不同的串口通信模块。当Ux为USART0时,将P0_2定义为UART接收引脚,P0_3定义为UART发送引脚;当Ux为USART1时,将P0_5定义为UART接收引脚,P0_4定义为UART发送引脚。
下面是该函数的执行过程:
1. 接收传入的参数Ux,判断其值是否为USART0。
2. 若Ux的值为USART0,则进入if语句中,执行PERCFG = 0x00;设置备用位置1,SFR寄存器位PERCFG.U0CFG选择是否使用备用位置1或备用位置2;执行P0SEL = 0x0c;将P0_2和P0_3设置为外设引脚;执行P2DIR &= ~0xc0;将USART0设置为第一优先级;执行U0CSR |= 0x80;将USART模式选择为UART方式;执行U0GCR |= GCR;U0BAUD |= BAUD;分别设置波特率指数值和波特率小数部分的值;执行UTX0IF = 0;将UART0 TX传送中断标志初始置为0;执行U0CSR |= 0X40;使能UART接收器;执行IEN0 |= 0x84;开启总中断和接收中断,使能USART0 RX中断。
3. 若Ux的值不为USART0,继续判断其值是否为USART1。
4. 若Ux的值为USART1,则进入else if语句中,执行PERCFG = 0x00;设置备用位置1,SFR寄存器位PERCFG.U0CFG选择是否使用备用位置1或备用位置2;执行P0SEL |= 0x30;将P0_5和P0_4设置为外设引脚;执行P2DIR |= 0x10;将USART1设置为第一优先级;执行U1CSR |= 0x80;将USART模式选择为UART方式;执行U1GCR = GCR;U1BAUD = BAUD;分别设置波特率指数值和波特率小数部分的值;执行UTX1IF = 0;将UART1 TX传送中断标志初始置为0;执行IEN0 |= 0x84;开启总中断和接收中断,使能USART1 RX中断。
5. 若Ux的值既不为USART0也不为USART1,则函数执行结束。
这样,UART初始化函数就根据传入的参数Ux完成了对相应的串口通信模块的初始化。
void initUart(void){ CLKCONCMD &= ~0x40; //设置系统时钟源为 32MHZ 晶振 while(CLKCONSTA & 0x40); //等待晶振稳定 CLKCONCMD &= (~0x47); //设置系统主时钟频率为 32MHZ PERCFG = 0x00; // 设置外设控制为 P0 P0SEL = 0x3C; // 选择 P0_2,P0_3,P0_4,P0_5 作为串口 P2DIR &= (~0XC0); //P0 优先作为 UART0 U0CSR |= 0x80; //UART 方式 U0GCR |= 11; U0BAUD |= 216; //波特率设为 115200 UTX0IF = 1; //UART0 TX 中断标志初始置位 1 U0CSR |= 0x40; //允许中断接收 IEN0 |= 0x84; //开总中断,接收数据}//串口发送字符串 data - 数据指针 len - 数据长度void uartSendString(u8 *data, u8 len){ u8 j; for(j = 0; j < len; j++) { U0DBUF = *data++; // 填充数据到串口数据寄存器 while (UTX0IF == 0); // 等待串口发送完毕 UTX0IF = 0; // 将串口中断标志置 0,准备下一次的发送 }}//接收函数以#结束,最大接收64byte数据#pragma vector = URX0_VECTOR __interrupt void UART0_ISR(void){ URX0IF = 0; //清除中断 tmp = U0DBUF; //接收数据 if((tmp != '#') && (recSta < 0x40)) //判断是否以#结尾的数据,或者接收的
这段代码定义了两个函数,一个是"initUart",用于初始化串口;另一个是"uartSendString",用于向串口发送字符串。
在"initUart"函数中,首先设置系统时钟源为32MHZ晶振,并等待晶振稳定。然后设置系统主时钟频率为32MHZ,将外设控制设置为P0,选择P0_2、P0_3、P0_4和P0_5作为串口,将P0优先作为UART0。接着设置UART方式,将波特率设为115200,将UART0 TX中断标志初始置为1,允许中断接收,开总中断,接收数据。
在"uartSendString"函数中,使用一个for循环依次向串口发送数据。每次发送完毕后,使用while循环等待串口发送完成,并将串口中断标志置0,准备下一次发送。
最后,定义了一个UART0中断服务函数"UART0_ISR",当有数据接收时,将接收数据存储到"tmp"变量中,并判断是否以#结尾的数据或者接收的数据长度是否超过了64byte。如果接收到的数据符合要求,则将数据存储到接收缓冲区"recBuf"中。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)