头像-41057

kissmey

  • 四川省成都市
  • 单片机 电源技术 模拟技术
  • 工控电子

个人成就

获得 0 次赞

帮助过0人

51单片机能接收不能发送

采用c8051f040进行串口通讯,通过max3072,现在的问题是能够接收,但发送就死在while(TI0==0)这句了。 麻烦大家帮忙找下原因。 应该是个简单的程序,怎么就总是死在while了? #include "c8051F040.h" #define uchar unsigned char #define uint unsigned int void port_init(); void os_init(); void uart_init(); void time_init(); uchar g; uchar flag = 0;//接收数据标志 sbit RD0  = P7^7;//使能  void main() {           WDTCN = 0xDE;     // 关闭看门狗 地址是OxFF  WDTCN = 0xAD;     //防止意外产生的禁止操作  os_init();         //系统时钟初始化  port_init();       //端口初始化  time_init();  uart_init();  SFRPAGE   = CONFIG_PAGE; //0x0F  EA  = 1;  //开总中断,开串行中断  ES0 = 1;  while(1)  {     if(flag==1) {         RD0 = 1;         TI0= 0; SBUF0=g;        while(TI0==0);     TI0= 0;     flag=-0; }    } } void port_init() {     SFRPAGE   = CONFIG_PAGE;       XBR0      = 0x04;     XBR1      = 0x00;     XBR2      = 0x44;     P0MDOUT   = 0x01;//TX0-high,TX0-p0.0     P7MDOUT   = 0xFF;     RD0 = 0; } void os_init() {     unsigned short i = 0;     SFRPAGE   = CONFIG_PAGE;   //me Ox84=0x0F代表读或修改的时候所使用的SFR页     OSCXCN    = 0x77;   //即01110111,0:晶体振荡器未稳定;111:晶体振荡器二分频方式                                   //0:读;111:10Mhz~30Mh, 外部22.1184M晶振,系统时钟不分频     for (i = 0; i < 3000; i++);                         //等待外部晶振稳定,等待至少1ms     while ((OSCXCN & 0x80) == 0);             //第7位代表内部振荡器使能     CLKSEL    = 0x01;           //源自外部震荡器 }  void time_init() {     SFRPAGE   = TIMER01_PAGE;//0x00       TMOD      = 0x20;   //TIMER1 MODE2     CKCON     = 0X01;      //时钟控制寄存器0x8E,[NET]//ckcon^01=0x01,sysclk*1/4;  ckcon^01=0x00,sysclk*1/12;                                       // ckcon^01=0x02,sysclk*1/48; //ckcon^01=0x03,extra clk *1/8;ckcon=0x08,sysclk,(这个未证实);     TH1       = 0xEE;          //见[c8051f040 datasheet]p259 T0方式2原理                                    //图,SMOD0=1,方式1波特率为:1/16*T1CLK/(256-TH1)                       TR1       = 1;              //启动TIMER1           }    void uart_init() {     SFRPAGE   = UART0_PAGE;              //0x01,     SSTA0     = 0x10; //Timer1溢出产生uart0波特率,SMOD=1     SCON0     = 0x50; //允许uart0,8位UART } void UART0_Interrupt (void) interrupt 4 //串口0接收 { if (RI0==1){           RI0 = 0;                          // Clear interrupt flag           g = SBUF0;                    // Read a character from UART           flag = 1;    }  }

如何让大电压随小电压变化而变

如何让大电压随小电压变化而变化,小电压在5v以内,大电压在0到﹣100V。 小电压增加,大电压变小(负得更多) 应该如何来设计这个电路?

帮忙看下这个电路怎么分析

输入电压vin与参考电压相比,运放应该是一个比较器,绝大多数情况下输入电压都比参考电压低,因此运放 输出为负。最终的输出vout需要稳定在一个值,它和输入电压的关系是vout升高,vin升高。vout降,vin降。通过调节Vref也可以调节vout. 问题是这个正反馈电路是什么作用?三极管是否长期工作在截止状态下? 整个电路是如何实现通过比较来控制vout的呢?