2016-09-23 23:20:56 Insanity666 阅读数 881
  • 单片机有很多种-1.3.第1季第3部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第3个课程,主要讲了单片机的发展史,各种主流单片机的各自特点,STC51单片机的各系列的特点以及项目中如何选型主控单片机。

    2561 人正在学习 去看看 朱有鹏

    陆陆续续的再弄指纹模块,之前考虑板子供电和串口下载程序的问题买了转串口模块,只要把4根线接好就可以用了,VCC就接单片机上的VCC,GND就接板子上的GND,这很简单,要注意的是板子和串口模块上的串口接收和发送是反过来的,即板子上的TXD接到串口模块上的RXD,板子上的RXD接到串口模块上的TXD。

   是可以用了不过有两个问题,一个是现在我只能冷启动,虽然我可以通过拔一下VCC模拟上电过程,但我觉得麻烦所以想弄热启动,查些资料。二是只要我插着串口模块的TXD和RXD就会占用串口,指纹模块就不能正常工作。

    第二个问题我感觉是因为51就一个串口,我现在能想到的办法就是在下载程序结束后,拔掉TXD和RXD。

    第一个问题,在uart的接收函数上加上

 

使串口可以热启动。

资料:


(更详细信息请参考STC12系列单片机数据手册)



2017-02-10 11:27:00 weixin_33670713 阅读数 189
  • 单片机有很多种-1.3.第1季第3部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第3个课程,主要讲了单片机的发展史,各种主流单片机的各自特点,STC51单片机的各系列的特点以及项目中如何选型主控单片机。

    2561 人正在学习 去看看 朱有鹏

 

STC单片机串口输出ADXL335角度值:

  1 //*****************************************************
  2 //名称:单片机串口输出ADXL335角度值
  3 //使用单片机:stc12c5a60s2
  4 //供电:电压5v
  5 //晶振:11.0592m
  6 //X轴->(ADC0)P1.0  
  7 //Y轴->(ADC1)P1.1 
  8 //Z轴->(ADC1)P1.2
  9 //用pc串口助手显示时,选择字符显示 
 10 //参考宏晶网址例程
 11 //*****************************************************
 12 #include "reg51.h"
 13 #include "intrins.h"
 14 #include  <math.h>    //Keil library  
 15 #include  <stdio.h>   //Keil library
 16 
 17 //#define FOSC    18432000L
 18 #define FOSC    11059200L  //晶振11.0592M
 19 #define BAUD    9600
 20 
 21 typedef unsigned char BYTE;
 22 typedef unsigned int WORD;
 23 
 24 #define   uchar unsigned char
 25 #define   uint unsigned int    
 26 
 27 /*Declare SFR associated with the ADC */
 28 sfr AUXR1       =   0XA2;
 29 sfr ADC_CONTR   =   0xBC;           //ADC control register
 30 sfr ADC_RES     =   0xBD;           //ADC high 8-bit result register
 31 sfr ADC_RESL    =   0xBE;
 32 sfr ADC_LOW2    =   0xBE;           //ADC low 2-bit result register
 33 sfr P1ASF       =   0x9D;           //P1 secondary function control register
 34 
 35 /*Define ADC operation const for ADC_CONTR*/
 36 #define ADC_POWER   0x80            //ADC power control bit
 37 #define ADC_FLAG    0x10            //ADC complete flag
 38 #define ADC_START   0x08            //ADC start control bit
 39 #define ADC_SPEEDLL 0x00            //420 clocks
 40 #define ADC_SPEEDL  0x20            //280 clocks
 41 #define ADC_SPEEDH  0x40            //140 clocks
 42 #define ADC_SPEEDHH 0x60            //70 clocks
 43 
 44 void InitUart();
 45 void InitADC();
 46 void SendData(BYTE dat);
 47 int GetADCResult(BYTE ch);
 48 void Delay(WORD n);
 49 uchar ge,shi,bai,qian,wan;           //显示变量
 50 
 51 void conversion(uint temp_data)  
 52 {  
 53     wan=temp_data/10000+0x30 ;
 54     temp_data=temp_data%10000;   //取余运算
 55     qian=temp_data/1000+0x30 ;
 56     temp_data=temp_data%1000;    //取余运算
 57     bai=temp_data/100+0x30   ;
 58     temp_data=temp_data%100;     //取余运算
 59     shi=temp_data/10+0x30    ;
 60     temp_data=temp_data%10;      //取余运算
 61     ge=temp_data+0x30;     
 62 }
 63 
 64 /*----------------------------
 65 Get ADC result
 66 ----------------------------*/
 67 int GetADCResult(BYTE ch)
 68 {   int AD10bitResult; 
 69     ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
 70     _nop_();                        //Must wait before inquiry
 71     _nop_();
 72     _nop_();
 73     _nop_();
 74     while (!(ADC_CONTR & ADC_FLAG));//Wait complete flag
 75     ADC_CONTR &= ~ADC_FLAG;         //Close ADC
 76 
 77     AD10bitResult=ADC_RES;
 78     AD10bitResult<<=8;
 79     AD10bitResult|=ADC_RESL;
 80     return AD10bitResult;                  //Return 10BIT ADC result
 81 }
 82 /*----------------------------
 83 Initial UART
 84 ----------------------------*/
 85 void InitUart()
 86 {
 87     SCON = 0x5a;                    //8 bit data ,no parity bit
 88     TMOD = 0x20;                    //T1 as 8-bit auto reload
 89     TH1 = TL1 = -(FOSC/12/32/BAUD); //Set Uart baudrate
 90     TR1 = 1;                        //T1 start running
 91 }
 92 
 93 /*----------------------------
 94 Initial ADC sfr
 95 ----------------------------*/
 96 void InitADC()
 97 {
 98     P1ASF = 0xff;                   //Open 8 channels ADC function
 99 
100     AUXR1=AUXR1|0X04;              //ad值左对齐
101     ADC_RES = 0;                    //Clear previous result
102     ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
103     Delay(2);                       //ADC power-on and delay
104 }
105 
106 /*----------------------------
107 Send one byte data to PC
108 Input: dat (UART data)
109 Output:-
110 ----------------------------*/
111 void SendData(BYTE dat)
112 {
113     while (!TI);                    //Wait for the previous data is sent
114     TI = 0;                         //Clear TI flag
115     SBUF = dat;                     //Send current data
116 }
117 
118 /*----------------------------
119 Software delay function
120 ----------------------------*/
121 void Delay(WORD n)
122 {
123     WORD x;
124 
125     while (n--)
126     {
127         x = 5000;
128         while (x--);
129     }
130 }
131 
132 //******************************************************************************
133 
134 void main()
135 {   int x,y,z;
136     float Q,T,K,Roll,Pitch;
137     InitUart();                     //Init UART, use to show ADC result
138     InitADC();                      //Init ADC sfr
139     while (1)
140     {
141         x=GetADCResult(0);
142         y=GetADCResult(1);
143         z=GetADCResult(2);
144         // 0-5v 对应 0-1024  
145         // 3.3v/2  = 1.65v(0g时候值)
146         // 1.65v ->= 338   (AD值即0X0152)
147         x-=0X0152; //
148         y-=0X0152;
149         z-=0X0152;    
150     Q=x;
151     T=y;
152     K=z;
153     Q=-Q;
154     Roll=(float)(((atan2(K,Q)*180)/3.14159265)+180);
155     Pitch=(float)(((atan2(K,T)*180)/3.14159265)+180);
156     conversion(Roll);    //横滚角0-360度
157   //conversion(Pitch); //俯仰角0-360度
158     SendData(bai);
159     SendData(shi);
160     SendData(ge);
161 
162     SendData(0x0d); 
163     SendData(0x0a);//换行,回车
164 
165     Delay(30);
166     }
167 }

 

2013-05-20 10:31:07 grewer 阅读数 540
  • 单片机有很多种-1.3.第1季第3部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第3个课程,主要讲了单片机的发展史,各种主流单片机的各自特点,STC51单片机的各系列的特点以及项目中如何选型主控单片机。

    2561 人正在学习 去看看 朱有鹏

新买的BC04_B演示板通过串口与手机蓝牙通讯正常,发送接收无误。

单片机通讯波特率9600

将单片机串口与蓝牙演示板RS232串口连接,打开蓝牙之后,蓝牙连接自动断开传输数据不能。

分析:研究发现,蓝牙演示板采用miniUSB供电,单片机开发板也是USB供电,两个USB供电端口可能存在电压差,导致两个设备不共地。

           将基站板上VCC  GND单独连出来给蓝牙模块供电,发现蓝牙不会自动断开了。但数据传输不正常。

           然后,将单片机上TX,RX单独引出连接至蓝牙模块TX,DX上,突然发现有正确数据传输。

蓝牙模块与串口转换芯片为max3221 单片机串口转换芯片为max232。猜测二者芯片存在未知的通讯问题导致单片机与蓝牙模块通讯不正常。

2018-10-18 21:30:27 tutu1583 阅读数 272
  • 单片机有很多种-1.3.第1季第3部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第3个课程,主要讲了单片机的发展史,各种主流单片机的各自特点,STC51单片机的各系列的特点以及项目中如何选型主控单片机。

    2561 人正在学习 去看看 朱有鹏

最近在做强电的驱动控制电路,驱动电路暂且不谈,控制电路是用51单片机控制的,这就涉及到程序的下载,于是就用到串口下载程序。

我的51单片机最小系统是用AC220V转DC5V,给单片机最小系统供电,但是利用串口下载程序,需要冷启动。

当我把串口的VCC5V、GND、TX、RX接在电路中的时候,发现下载不了程序。为什么呢?找了好久,终于找到。

 

 

因为VCC5V、GND插上的时候,给AC220转DC5V模块的输出端中的电容充电,为什么这么说呢?因为输出端的led亮了,表示led上有压降,所以我推测输出端有一个电容,可以充放电(led可以慢慢的亮和灭)。所以我拿掉了电源模块,果然就可以下载程序了。

值得注意的是:

1、串口下载程序的时候,只需要VCC5V、GND、TX、RX接到单片机的最小系统即可,不用另外的VCC5V、GND给单片机的最小系统供电。

2、串口下载程序需要冷启动,冷启动要求VCC5V、GND之间的电压为0V,才能算是冷启动。

3、51单片机的EA使能端,之前理解有误,以为是单片机的使能端,其实是内外存储器选择引脚。(a、如外部不加上拉,或外部上拉到Vcc,上电复位后单片机从内部开始执行;b、如外部下拉到地,上电复位后单片机从外部开始执行程序)

2017-07-11 10:24:46 OurRtems 阅读数 721
  • 单片机有很多种-1.3.第1季第3部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第3个课程,主要讲了单片机的发展史,各种主流单片机的各自特点,STC51单片机的各系列的特点以及项目中如何选型主控单片机。

    2561 人正在学习 去看看 朱有鹏

    最近把家里的古董--我买的最早的一块51单片机开发板拿了出来,额,,这块板子有十几年了吧,应该2004年左右看到《电子制作》的期刊广告邮购的。再次拿了出来换上stc宏晶的stc89c52单片机,想让他继续发挥作用。用stc的下载工具下载程序时发现,下载软件一直提示给单片机上电。


    研究了大半天都没找出问题,试过:

1.换单片机

2.换usb转串口线

3.换供电方式

4.换max232芯片

5.研究原理图,看板子上跳线

    试了上面几种方法都没成功,后面干脆拿万用表测量串口通路,发现单片机txd、rxd两根线到max232芯片,max232到跳线,跳线到db9整个通路都是通的,那这就没问题了。忽然想起以前调试stm32单片机时,有一次调串口程序时没有连地线导致不能给其下载程序的问题,也是研究了半天才发现问题的原因。有了这个解决问题的思路,立刻做实验,问题解决。

    总结:无论是51单片机还是stm32单片机,用串口下载程序一定要接地线,即txd、rxd、gnd三根线。

by:霜月孤鸟

2017.07.11

没有更多推荐了,返回首页