最近在学习使用LORA无线通信模块 我在蓝桥杯CT107D开发板上可以 通过连接在STC89C52单片机上的LORA模块 发送数据到连接电脑的LORA模块 但我用最小系统板上的89C52单片机却无法发送到电脑上 代码如下 LORA模块为出场设置 9600波特率 #include <reg51.h> typedef unsigned char uint8; typedef unsigned int uint16; uint8 Buf[]="hello world!\n"; void delay(uint16 n) { while (n--); } /@@*波特率为9600*/ void UART_init(void) { SCON = 0x50; //串口方式1 TMOD = 0x20; // 定时器使用方式2自动重载 TH1 = 0xFD; //9600波特率对应的预设数,定时器方式2下,TH1=TL1 TL1 = 0xFD; TR1 = 1;//开启定时器,开始产生波特率 } /@@*发送一个字符*/ void UART_send_byte(uint8 dat) { SBUF = dat; //把数据放到SBUF中 while (TI == 0);//未发送完毕就等待 TI = 0; //发送完毕后,要把TI重新置0 } /@@*发送一个字符串*/ void UART_send_string(uint8 *buf) { while (*buf != '\0') { UART_send_byte(*buf++); } } main() { UART_init(); while (1) { UART_send_string(Buf); delay(20000); }
请问如果使用捕获功能是不是其他中断都不能用,而且优先级设置捕获最高也没用,2个中断嵌套和1个中断会不会影响捕获数据,多个中断嵌套和单个中断保存堆栈的时间是一样的吗
51hei图片20210415151748.png (44.84 KB 下载次数: 0) 下载附件 保存到相册 2021-4-15 15:26 上传 萌新请问这个继电器连接的加热棒电路有问题吗,还有就是如果是700w加热棒需要限流电阻吗,怎么计算
stc52单片机晶振不起振两端电压只有0.1V晶振和芯片都换过了电容20
新唐单片机N76E003 在测试ISP串口下载程序时,波特率设置115200 可以正常链接上位机,但是波特率改为9600时却不能跟上位机通信115200 正常可以操作,且可以通过串口更新APROM9600,串口监听数据看不出来问题,但是上位机与单片机始终无法链接成功ISP VS源码修改波特率N76E003 串口初始化由于串口设备只能支持9600,求做过的大神给指导指导。
51单片机用定时0和外部中断捕获,那么开启定时器1后捕获的数据有影响是什么原因,优先级默认定时器1是在外部中断和定时器0之后的
原来只有一个单片机一个外部ram,现在增加一个单片机如何实现共享ram,新的单片机只执行读取操作
请教一下,为什么我在定时器中开总中断EA=1;串口接收数据就不正常了,EA=0;时反而是正常的? void T2_INIT() { TMR2CN=0X04; //16 bitsTR2=1;CLK=SYSTEM CLK/12=4M TMR2RLH=0XF0; //10ms:65536-40000=25536=63c0; TMR2RLL=0X60; //1ms:65536-4000=61536=F060; ET2=1; //enable T2 interrupt TR2=1; EA=1; }复制代码
#define __mimasuo_h sbit pa0=P2^0; sbit pa1=P2^1; sbit pa2=P2^2; sbit pa3=P2^3; sbit pa4=P2^4; sbit col0=P3^0; sbit col1=P3^1; sbit col2=P3^2; sbit col3=P3^3; sbit col4P3^4;. sbit led =P5^5; void main() { led=0; while(1) { ; } } void coded_lock(void); u8 ajz=0; u8 fori; u8 forj; u8 fork; u8 forl; u8 zq; u8 zqz; u8 numa; u8 cw=0; u8 num_before = 0; extern u8 tuige; //extern u8 tuiges; extern u8 quxiao; extern u8 num; extern u8 zhi; extern u8 state; extern u8 anxia; extern u8 queding; u8 enter[6]={0};//输入密码数组 u8 correct[]={990505};//正确密码 u8 b1[6]= {990505};//"990505"; void coded_lock(void) { //EEPROM_WriteBytes(b106); numa=num-1; if(num<7) { if(anxia==1) { anxia=0; if(zhi<10) { enter[numa]=zhi; if(num==6) { num=0; for(fori=0;fori<6;fori++) { if(enter[fori]==correct[fori]) { zq++; if(zq==6) { zq=0; dks_kai(); for(forl=0;forl<6;forl++) { enter[forl]=0; } } } else { zq=0; cw=1; for(forj=0;forj<6;forj++) { enter[forj]=0; } } } } } if(tuige==1)//退格 { if(numa<6) { tuige=0; enter[numa]=0; num-=1; } } if(num != num_before) } } } #endif
各位大佬,我是照STC官网下载的手册电路图做的 芯片型号为:stc89c52rc晶振该选择有源还是无源? 如下图,C6和R2大小该是多大阿?上面没有标 Snipaste_2021-03-28_19-03-15.png (134.69 KB 下载次数: 0) 下载附件 保存到相册 2021-3-28 19:03 上传
这段时间迷上了单片机,买了个开发版研究跟着看郭老师视频跟着做,现在只会点亮LED灯了,然后通过按键控制某个IO口输出低电平。我现在自己做了个锂电池供电的小夜灯,接了一个按键开关,和一个光线传感模块,现在能正常使用,但是这个单片机有待机功耗,用锂电池供电用不了几周没电了,各位大侠怎么写程序让它进入低功耗,然后通过外部IO口输入低电平让它进入工作状态,谢谢各位! 1.jpg (16.23 KB 下载次数: 0) 下载附件 保存到相册 2021-3-18 17:21 上传 类似这样的单片机,图片是在网上找的参考一下。谢谢感激!
#include <intrins.h> #include "config.h" #include "stdio.h"//用于调用printf函数原型 /@@* 串口配置函数,baud-通信波特率 */ void ConfigUART(unsigned int baud) { RS485_DIR = 0; //RS485设置为接收方向 g_rs485_uart_pop_ptr = 0; //当 g_uart_pop_ptr + 1 = g_uart_push_ptr 时缓存为空 g_rs485_uart_push_ptr = 1; //此处加1是指针加1,即计算下一个指针 rs485_sbuf.out_index = 0; //---- rs485_sbuf.in_index = 1; rs485_sbuf.send_runing = FALSE; ACC = P_SW1; ACC &= ~(S1_S0 | S1_S1); //S1_S0=0 S1_S1=0 P_SW1 = ACC; //(P3.0/RxD P3.1/TxD) SCON = 0x50; //配置串口为模式1 AUXR = 0x40; //定时器1为1T模式 AUXR &= 0xFE; TMOD = 0x00; //定时器1为模式0(16位自动重载) TL1 = (65536 - (FOSC/4/baud)); //设置波特率重装值 TH1 = (65536 - (FOSC/4/baud))>>8; ET1 = 0; //禁止T1中断 ES = 1; //使能串口中断 TR1 = 1; //启动T1 EA=1; } 当调用这个ConfigUART(unsigned int baud);写入9600、57600时通过串口助手接收发关送数据正确,当写入115200时通过串口助手接收发关送数据不对 如果把上面的 TL1 = (65536 - (FOSC/4/baud)); //设置波特率重装值 TH1 = (65536 - (FOSC/4/baud))>>8; 改为: TL1 = (65536 - (FOSC/4/115200)); //设置波特率重装值 TH1 = (65536 - (FOSC/4/115200))>>8; 时通过串口助手接收发关送数据正确。 请各位大神指教函数那里错了!!!!!