性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

  • 回復(fù)
  • 收藏
  • 點(diǎn)贊
  • 分享
  • 發(fā)新帖

今天剛剛弄好的STC單片機(jī)免重啟下載線!

  自己在學(xué)51單片機(jī)時(shí)選用的是AT89S5X系列的單片機(jī),后來(lái)接觸到STC89C5X系列和STC12、15系列后因?yàn)樨S富的內(nèi)部資源和合適的價(jià)格,而且直接用串口就能下載程序,大多數(shù)基本選用了STC的單片機(jī)。

  但是STC單片機(jī)有個(gè)說(shuō)麻煩不麻煩,但說(shuō)不麻煩又挺煩的問(wèn)題。就是下載程序時(shí)需要重啟電源,在寫(xiě)程序驗(yàn)證過(guò)程中不斷修改程序在所難免,于是重啟電源就成了不小的負(fù)擔(dān),而且影響心情還傷電源開(kāi)關(guān),這點(diǎn)就足以讓我還對(duì)ATMEL的SPI燒寫(xiě)余情未了!人家多方便,一鍵OK。

  于是乎!百度看看有沒(méi)有可以解決這個(gè)問(wèn)題的方法,果然這STC單片機(jī)的這個(gè)不方便大家都有共識(shí),但是真正有人愿意共享出來(lái)的資料,要么程序一看就有錯(cuò)誤,分明STC15F104W沒(méi)有串口模塊偏寫(xiě)個(gè)串口中斷,貼個(gè)電路圖和程序都不搭邊。。。我無(wú)語(yǔ),看了文庫(kù)里的資料那叫一個(gè)內(nèi)牛滿面。。。發(fā)資料的人你就不能不嘚瑟嘛,把他的心路歷程有感情的看完后才發(fā)現(xiàn)人家也是COPY的,而且經(jīng)過(guò)美化完全不成樣子。。。

  于是乎!還是自力更生吧。。主控芯片選用STC15F104W。我喜歡STC15F104W這塊單片機(jī),因?yàn)樗挥?個(gè)腳,小巧玲瓏的東西就是看著喜歡。但為什么不給它裝個(gè)UART模塊,老姚(網(wǎng)上都這么叫)實(shí)在是太小氣了!

  雖然說(shuō)網(wǎng)上資料很坑,但是起碼思路還有那么一絲靠譜。原理很簡(jiǎn)單,無(wú)非就是STC_ISP這個(gè)軟件在加載完HEX文件后點(diǎn)擊“下載”后,軟件會(huì)給選中串口發(fā)送一連串相同的數(shù)據(jù),我叫他握手信號(hào)吧,這個(gè)握手信號(hào)其實(shí)就是一個(gè)固定的波形,無(wú)非我用2400bps的波特率讀出是“0x7F”,用9600bps讀出的是“0xF8”,我程序就是9600bps的波特率。或者其他波特率讀出是啥。。。自己看看就知道了。。。

  STC的單片機(jī)上電后首先是執(zhí)行一小段驗(yàn)證程序,判斷是否要進(jìn)入燒寫(xiě)程序過(guò)程,如果沒(méi)有這個(gè)驗(yàn)證信號(hào)就執(zhí)行ROM里的程序,當(dāng)然這個(gè)驗(yàn)證的程序是STC單片機(jī)生產(chǎn)時(shí)就定義了的我們沒(méi)法改變。

  我要實(shí)現(xiàn)不用手動(dòng)上電,那必須需要一個(gè)“電子開(kāi)關(guān)”來(lái)幫我上電,三極管、繼電器、MOS管。。。。隨便你。

  我用的是繼電器來(lái)給需要編程的STC單片機(jī)重新上電的。電路很簡(jiǎn)單,就一個(gè)8550加個(gè)電阻驅(qū)動(dòng)一個(gè)小繼電器再加個(gè)續(xù)流二極管,繼電器控制電源正極對(duì)待編程單片機(jī)的供電,選擇常閉那對(duì)接口。

  整個(gè)程序很簡(jiǎn)單,就是利用IO口來(lái)模擬串口接收數(shù)據(jù),判斷當(dāng)連續(xù)接收到若干個(gè)握手信號(hào)后判斷,斷開(kāi)待編程單片機(jī)的電源一段時(shí)間后重新接通電源,整個(gè)過(guò)程監(jiān)控芯片(STC15F104W)沒(méi)有輸出數(shù)據(jù)到串口線,不影響STC單片機(jī)的燒寫(xiě)。

  最終效果很不錯(cuò),達(dá)到預(yù)期的效果了。。。。感興趣的你也試試!

  大體原理就這樣,不喜歡藏著掖著,下面是所有資料:STC15F104免上電下載線.rar

上測(cè)試圖,雖然這個(gè)效果在圖片上完全不能體現(xiàn),但還是喜歡貼子里有圖片。

IMG_20140407_173358

IMG_20140407_173405

IMG_20140407_173410

IMG_20140407_173416

  

全部回復(fù)(11)
正序查看
倒序查看
2014-04-08 17:19
好帖子,感謝wwpwwp20088!
0
回復(fù)
178064035
LV.4
3
2014-04-11 19:20

我也做了一個(gè)STC免啟動(dòng)下載板,帶邏輯分析儀。可以支持多種STC芯片下載

 

// 作品:STC免手動(dòng)燒寫(xiě)(自適應(yīng)波特率自動(dòng)冷啟) + 簡(jiǎn)易邏輯分析儀
// 主控:STC15F104E
// 晶振:45MHz
// 編譯:Keil uVision4 V9.50a
// 
// 說(shuō)明:自適應(yīng)STC-ISP軟件最低波特率(1200bps/2400bps/4800bps)
//		 3種模式:①自動(dòng)燒寫(xiě)  (默認(rèn))	   【LED_key不亮:模式① ,LED亮:通電 ,LED不亮:關(guān)電】
//		          ②邏輯分析儀(正向波形) 【LED_key亮  :模式② ,LED亮:預(yù)備 ,LED不亮:采樣】
//		          ③邏輯分析儀(反向波形) 【LED_key閃爍:模式③ ,LED亮:預(yù)備 ,LED不亮:采樣】
//       ①②③模式下,系統(tǒng)板都可以正常串口通信。
//       ②③模式下,也可以燒寫(xiě)程序(手動(dòng)燒寫(xiě)),不過(guò)正在“采樣”時(shí)請(qǐng)不要燒寫(xiě)程序以及系統(tǒng)板串口通信。
//
// 	 注:建議燒寫(xiě)程序時(shí)啟動(dòng)看門(mén)狗(預(yù)分頻數(shù)256,約2.2S @ 45MHz)
//
//	 另:關(guān)于STC-ISP V4.88版本,發(fā)現(xiàn)用PL2303HX芯片燒寫(xiě)STC15系列很難成功,最低/高波特率都選用4800bps才可以燒寫(xiě)。
//		 關(guān)于STC-ISP V6.06版本,用PL2303HX芯片燒寫(xiě)STC15系列非常好(直接用默認(rèn)的最低/高波特率),
//       但V6.06版本內(nèi)部R/C振蕩器最高只可以選33.1776MHz。
//		 用FT232芯片燒寫(xiě),則通殺STC-ISP所有版本(直接用默認(rèn)的最低/高波特率)。
//
//※ 江湖游客BXAK,2011/10/30
//※ http://hi.baidu.com/江湖游客bxak/home

#include "STC15F104E.H"
#include "MY_SET.h"

 sbit LED   = P3^0;	 //指示燈
 sbit KEY   = P3^1;  //按鍵
 sbit TXB   = P3^2;                       
 sbit RXB   = P3^3;
 sbit PNP   = P3^4;	 //PNP三極管
 sbit IO_in = P3^5;	 //分析儀采樣引腳

uint8   Mode;		 //模式
bit		B_init;		 //初始化標(biāo)志
uint8   KEY_Value; 	 //按鍵消抖計(jì)數(shù)
bit	    ON;			 //按鍵標(biāo)志
bit     Over;
bit		LED_key;	 //模式指示燈(在按鍵上擴(kuò)展)
uint16  Count;		 //閃爍計(jì)數(shù)
bit     P_N;		 //正向標(biāo)志
uint8   BIT8,cnt,Dat;
uint16  Time;

uint8 TBUF,RBUF;	 //發(fā)送/接收緩存
uint8 TDAT,RDAT;	 //發(fā)送/接收數(shù)據(jù)暫存
uint8 TCNT,RCNT;	 //發(fā)送/接收計(jì)數(shù)器
uint8 TBIT,RBIT;	 //發(fā)送/接收比特?cái)?shù)
bit   TING,RING;	 //開(kāi)始發(fā)送/接收標(biāo)志
bit   TEND,REND;	 //發(fā)送/接收完成標(biāo)志

bit   START;         //重啟標(biāo)志
uint8 Correct_nums;	 //『連續(xù)正確』計(jì)數(shù)器
uint8 Error_nums;	 //錯(cuò)誤累加計(jì)數(shù)器
uint8 Status;        //波特率狀態(tài)

/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函數(shù):延時(shí)
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void YS(uint8 n)
{
  uint8 a,b,c;

  while(n--)
  {
	 for(c=66;c>0;c--)
     for(b=100;b>0;b--)
     for(a=100;a>0;a--);
  }
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函數(shù):串口初始化
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void UART_INIT()
{
   TING = 0;
   RING = 0;
   TEND = 1;
   REND = 0;
   TCNT = 0;
   RCNT = 0;
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函數(shù):邏輯分析儀初始化
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void Analyzer_Init()		
{
   TR1 = 0;
   TF1 = 0;
   Time = 0;
   BIT8 = 0;
   TL0 = 0x7E; 	 //初始化T0和設(shè)定重載值
   TH0 = 0xFF;	 //修改成 115200bps
   LED = 0;		 //指示燈開(kāi)
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函數(shù):自動(dòng)燒寫(xiě)模式下波特率切換(定時(shí)器0模擬)
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void UART_Change()
{
   if(++Status > 2)Status=0;
   switch(Status)
   {
	 case 0: TL0=(65536-15000000/1200); TH0=(65536-15000000/1200)>>8; break; // 1200bps 
	 case 1: TL0=(65536-15000000/2400); TH0=(65536-15000000/2400)>>8; break; // 2400bps 
	 case 2: TL0=(65536-15000000/4800); TH0=(65536-15000000/4800)>>8; break; // 4800bps 
   }
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函數(shù):重啟程序
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void Restart()
{		 	 
  if(START)
  {
	 START = 0;
				 
	 TR0 = 0;
	 PNP = 1;		    //關(guān)電
	 LED = 1;
	 YS(10);	        //從『加載HEX』到『提示上電』有5秒,但不必等到『提示上電』
	 WDT_CONR |= 0x10;  //清看門(mén)狗(預(yù)分頻數(shù)256,約2.2S @ 45MHz)
	 PNP = 0;		    //通電
 	 LED = 0;
	 YS(30);
	 WDT_CONR |= 0x10;  //清看門(mén)狗(預(yù)分頻數(shù)256,約2.2S @ 45MHz)

	 TR0 = 1;
	 RING = 0;
     REND = 0;
     RCNT = 0;
  }
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函數(shù):主程序
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void main()
{
   uint8 i;
	
   P33 	= 1;
   WDT_CONR |= 0x10; //清看門(mén)狗(預(yù)分頻數(shù)256,約2.2S @ 45MHz)	
   PNP = 0;		     //通電
   LED  = 0;
   LED_key = 1;		 //關(guān)
   
   for(i=0;i<30;i++){ YS(1); LED = ~LED; } //冷啟/低壓復(fù)位 指示
   WDT_CONR |= 0x10; //清看門(mén)狗(預(yù)分頻數(shù)256,約2.2S @ 45MHz)
   		   
   TMOD = 0x00;      //T0、T1處于16位自動(dòng)重裝模式
   AUXR = 0xC0;      //T0、T1工作在1T模式 
   TL1 = (65536-903);
   TH1 = (65536-903)>>8;	  			    
   UART_Change();
   TR0 = 1;  
   EA  = 1;        
   ET0 = 1;  
   PT0 = 1;          //提高T0的中斷優(yōu)先級(jí)
   ET1 = 1;                 			  
   UART_INIT();

   Mode = 0;

   while(1)
   {                             
	 switch(Mode)
     {
	    case 0: if(B_init)
		        { 
				   B_init=0; 
				   TR1=0; 
                   PNP = 0;		     //通電
				   LED=0; 
				   UART_Change(); 
				   UART_INIT();
				}
				Restart();	
			    LED_key = 1;	   			         
		        break;  

	    case 1: if(B_init){ B_init=0; P_N=1; Analyzer_Init(); }
		        if(!IO_in){ TR1=1; LED=1;  }        //啟動(dòng)定時(shí)器1,采樣開(kāi)始
	            if(Over)  
				{ 
				   Over=0; 
				   if(++Time > 3320)Analyzer_Init();//約16.6秒(5ms * 3320),即每次采集完,過(guò)4秒(16.6S-12.6S)后重新工作 
				} 
				LED_key = 0;					     
		        break;

		case 2: if(B_init){ B_init=0; P_N=0; Analyzer_Init(); }
		        if(!IO_in){ TR1=1; LED=1;  }        
	            if(Over)
				{ 
				   Over=0; 
				   if(++Time > 3320)Analyzer_Init(); 
				} 
				if(++Count >10000){ Count=0; LED_key=!LED_key;} //閃爍
		        break;
	
		default:Mode=0;
		        break;		
     }
	 
	 //按鍵檢測(cè)
	 KEY = 1;		  //拉高電平
	 NOP12();		  //稍微延時(shí)
	 if(!KEY)
	 {
		if(ON==0)KEY_Value++;
		if(KEY_Value > 200)
	    {
	       KEY_Value = 0; 
		   ON = 1;	      //按鍵標(biāo)志置“1”	   
		   if(++Mode > 2)Mode=0;
		   B_init = 1;	  //『初始化標(biāo)志』置“1”
	    }
	 }
	 else { KEY_Value=0; ON=0; } 
						    
	 //恢復(fù)指示燈狀態(tài)
	 if(LED_key)KEY=1; 
	 else       KEY=0;

	 WDT_CONR |= 0x10;     //清看門(mén)狗(預(yù)分頻數(shù)256,約2.2S @ 45MHz)
   }
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函數(shù):定時(shí)器0中斷程序,模擬串口
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void tm0() interrupt 1 using 1
{					
   if(RING)
   {
      if(--RCNT == 0)
      {
         RCNT = 3;             //復(fù)位接收波特率計(jì)數(shù)器
         if(--RBIT == 0)
         {		  
            RBUF = RDAT;       //保存數(shù)據(jù)到RBuf管理
            RING = 0;          //停止接收
            REND = 1;          //設(shè)置接收完成標(biāo)志
         }
         else
         {
            RDAT >>= 1;
            if(RXB) RDAT |= 0x80; //RX數(shù)據(jù)轉(zhuǎn)移到RX緩沖區(qū)
         }
      }
   }
   else if(!RXB)			   //是否檢測(cè)到低電平
   {
      RING = 1;                //設(shè)置開(kāi)始接收標(biāo)志
      RCNT = 4;                //初始接收波特率計(jì)數(shù)器
      RBIT = 9;                //初化始接收比特?cái)?shù)(8個(gè)數(shù)據(jù)位+1個(gè)停止位)
   }
    
   if(--TCNT == 0)
   {
      TCNT = 3;                //復(fù)位發(fā)送波特率計(jì)數(shù)器
      if(TING)                 //判斷是否發(fā)送
      {
         if(TBIT == 0)
         {
            TXB = 0;           //發(fā)送起始位
            TDAT = TBUF;       //加載數(shù)據(jù)從TBUF至TDAT
            TBIT = 9;          //初化始發(fā)送比特?cái)?shù)(8位數(shù)據(jù)位+1個(gè)停止位)
         }
		 else
         {
            TDAT >>= 1;        //位移數(shù)據(jù)至CY
            if(--TBIT == 0)
            {
               TXB = 1;
               TING = 0;       //停止發(fā)送
               TEND = 1;       //設(shè)置發(fā)送完成標(biāo)志
            }
            else
            {
               TXB = CY;       //寫(xiě)CY至TX端口
            }
         }
      }
   }
					  
   if((Mode==0) && REND)			
   {				   
      REND = 0;
      if(RBUF == 0x7F)
	  { 		   	   	 
		 if(++Correct_nums > 10)
		 {				 
		    START=1;            
			Correct_nums=0;	
			Error_nums=0;
		 }
	  } 
	  else 		   
	  {
	     Correct_nums=0;
		 if(++Error_nums > 6)
		 {
		    TR0 = 0;
			Error_nums=0;
			Correct_nums=0;	
			UART_Change();
            RING = 0;
            REND = 0;
            RCNT = 0;
			TR0 = 1;
		 } 
	  }
   }
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函數(shù):定時(shí)器1中斷程序
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void tm1() interrupt 3         
{						   
	if(IO_in)Dat |= 0x01;   
 	if(++BIT8 == 8) 		 //每采集8次發(fā)送一次
	{
	  if(P_N)TBUF =  Dat;	 //正向輸出
	  else	 TBUF = ~Dat;	 //反向輸出
      TING = 1;
	  BIT8 = 0;
  	}
	Dat <<= 1;			 
	if(++cnt == 0)Over=1;     //約5ms置1一次
}

 

0
回復(fù)
2014-04-11 22:53
@178064035
[圖片]我也做了一個(gè)STC免啟動(dòng)下載板,帶邏輯分析儀??梢灾С侄喾NSTC芯片下載 //作品:STC免手動(dòng)燒寫(xiě)(自適應(yīng)波特率自動(dòng)冷啟)+簡(jiǎn)易邏輯分析儀//主控:STC15F104E//晶振:45MHz//編譯:KeiluVision4V9.50a////說(shuō)明:自適應(yīng)STC-ISP軟件最低波特率(1200bps/2400bps/4800bps)//3種模式:①自動(dòng)燒寫(xiě)(默認(rèn))【LED_key不亮:模式①,LED亮:通電,LED不亮:關(guān)電】//②邏輯分析儀(正向波形)【LED_key亮:模式②,LED亮:預(yù)備,LED不亮:采樣】//③邏輯分析儀(反向波形)【LED_key閃爍:模式③,LED亮:預(yù)備,LED不亮:采樣】//①②③模式下,系統(tǒng)板都可以正常串口通信。//②③模式下,也可以燒寫(xiě)程序(手動(dòng)燒寫(xiě)),不過(guò)正在“采樣”時(shí)請(qǐng)不要燒寫(xiě)程序以及系統(tǒng)板串口通信。////注:建議燒寫(xiě)程序時(shí)啟動(dòng)看門(mén)狗(預(yù)分頻數(shù)256,約2.2S@45MHz)////另:關(guān)于STC-ISPV4.88版本,發(fā)現(xiàn)用PL2303HX芯片燒寫(xiě)STC15系列很難成功,最低/高波特率都選用4800bps才可以燒寫(xiě)。//關(guān)于STC-ISPV6.06版本,用PL2303HX芯片燒寫(xiě)STC15系列非常好(直接用默認(rèn)的最低/高波特率),//但V6.06版本內(nèi)部R/C振蕩器最高只可以選33.1776MHz。//用FT232芯片燒寫(xiě),則通殺STC-ISP所有版本(直接用默認(rèn)的最低/高波特率)。////※江湖游客BXAK,2011/10/30//※http://hi.baidu.com/江湖游客bxak/home#include"STC15F104E.H"#include"MY_SET.h"sbitLED=P3^0;//指示燈sbitKEY=P3^1;//按鍵sbitTXB=P3^2;sbitRXB=P3^3;sbitPNP=P3^4;//PNP三極管sbitIO_in=P3^5;//分析儀采樣引腳uint8Mode;//模式bitB_init;//初始化標(biāo)志uint8KEY_Value;//按鍵消抖計(jì)數(shù)bitON;//按鍵標(biāo)志bitOver;bitLED_key;//模式指示燈(在按鍵上擴(kuò)展)uint16Count;//閃爍計(jì)數(shù)bitP_N;//正向標(biāo)志uint8BIT8,cnt,Dat;uint16Time;uint8TBUF,RBUF;//發(fā)送/接收緩存uint8TDAT,RDAT;//發(fā)送/接收數(shù)據(jù)暫存uint8TCNT,RCNT;//發(fā)送/接收計(jì)數(shù)器uint8TBIT,RBIT;//發(fā)送/接收比特?cái)?shù)bitTING,RING;//開(kāi)始發(fā)送/接收標(biāo)志bitTEND,REND;//發(fā)送/接收完成標(biāo)志bitSTART;//重啟標(biāo)志uint8Correct_nums;//『連續(xù)正確』計(jì)數(shù)器uint8Error_nums;//錯(cuò)誤累加計(jì)數(shù)器uint8Status;//波特率狀態(tài)/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):延時(shí)┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidYS(uint8n){uint8a,b,c;while(n--){for(c=66;c>0;c--)for(b=100;b>0;b--)for(a=100;a>0;a--);}}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):串口初始化┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidUART_INIT(){TING=0;RING=0;TEND=1;REND=0;TCNT=0;RCNT=0;}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):邏輯分析儀初始化┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidAnalyzer_Init(){TR1=0;TF1=0;Time=0;BIT8=0;TL0=0x7E;//初始化T0和設(shè)定重載值TH0=0xFF;//修改成115200bpsLED=0;//指示燈開(kāi)}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):自動(dòng)燒寫(xiě)模式下波特率切換(定時(shí)器0模擬)┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidUART_Change(){if(++Status>2)Status=0;switch(Status){case0:TL0=(65536-15000000/1200);TH0=(65536-15000000/1200)>>8;break;//1200bpscase1:TL0=(65536-15000000/2400);TH0=(65536-15000000/2400)>>8;break;//2400bpscase2:TL0=(65536-15000000/4800);TH0=(65536-15000000/4800)>>8;break;//4800bps}}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):重啟程序┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidRestart(){if(START){START=0;TR0=0;PNP=1;//關(guān)電LED=1;YS(10);//從『加載HEX』到『提示上電』有5秒,但不必等到『提示上電』WDT_CONR|=0x10;//清看門(mén)狗(預(yù)分頻數(shù)256,約2.2S@45MHz)PNP=0;//通電LED=0;YS(30);WDT_CONR|=0x10;//清看門(mén)狗(預(yù)分頻數(shù)256,約2.2S@45MHz)TR0=1;RING=0;REND=0;RCNT=0;}}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):主程序┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidmain(){uint8i;P33=1;WDT_CONR|=0x10;//清看門(mén)狗(預(yù)分頻數(shù)256,約2.2S@45MHz)PNP=0;//通電LED=0;LED_key=1;//關(guān)for(i=0;i>8;UART_Change();TR0=1;EA=1;ET0=1;PT0=1;//提高T0的中斷優(yōu)先級(jí)ET1=1;UART_INIT();Mode=0;while(1){switch(Mode){case0:if(B_init){B_init=0;TR1=0;PNP=0;//通電LED=0;UART_Change();UART_INIT();}Restart();LED_key=1;break;case1:if(B_init){B_init=0;P_N=1;Analyzer_Init();}if(!IO_in){TR1=1;LED=1;}//啟動(dòng)定時(shí)器1,采樣開(kāi)始if(Over){Over=0;if(++Time>3320)Analyzer_Init();//約16.6秒(5ms*3320),即每次采集完,過(guò)4秒(16.6S-12.6S)后重新工作}LED_key=0;break;case2:if(B_init){B_init=0;P_N=0;Analyzer_Init();}if(!IO_in){TR1=1;LED=1;}if(Over){Over=0;if(++Time>3320)Analyzer_Init();}if(++Count>10000){Count=0;LED_key=!LED_key;}//閃爍break;default:Mode=0;break;}//按鍵檢測(cè)KEY=1;//拉高電平NOP12();//稍微延時(shí)if(!KEY){if(ON==0)KEY_Value++;if(KEY_Value>200){KEY_Value=0;ON=1;//按鍵標(biāo)志置“1”if(++Mode>2)Mode=0;B_init=1;//『初始化標(biāo)志』置“1”}}else{KEY_Value=0;ON=0;}//恢復(fù)指示燈狀態(tài)if(LED_key)KEY=1;elseKEY=0;WDT_CONR|=0x10;//清看門(mén)狗(預(yù)分頻數(shù)256,約2.2S@45MHz)}}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):定時(shí)器0中斷程序,模擬串口┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidtm0()interrupt1using1{if(RING){if(--RCNT==0){RCNT=3;//復(fù)位接收波特率計(jì)數(shù)器if(--RBIT==0){RBUF=RDAT;//保存數(shù)據(jù)到RBuf管理RING=0;//停止接收REND=1;//設(shè)置接收完成標(biāo)志}else{RDAT>>=1;if(RXB)RDAT|=0x80;//RX數(shù)據(jù)轉(zhuǎn)移到RX緩沖區(qū)}}}elseif(!RXB)//是否檢測(cè)到低電平{RING=1;//設(shè)置開(kāi)始接收標(biāo)志RCNT=4;//初始接收波特率計(jì)數(shù)器RBIT=9;//初化始接收比特?cái)?shù)(8個(gè)數(shù)據(jù)位+1個(gè)停止位)}if(--TCNT==0){TCNT=3;//復(fù)位發(fā)送波特率計(jì)數(shù)器if(TING)//判斷是否發(fā)送{if(TBIT==0){TXB=0;//發(fā)送起始位TDAT=TBUF;//加載數(shù)據(jù)從TBUF至TDATTBIT=9;//初化始發(fā)送比特?cái)?shù)(8位數(shù)據(jù)位+1個(gè)停止位)}else{TDAT>>=1;//位移數(shù)據(jù)至CYif(--TBIT==0){TXB=1;TING=0;//停止發(fā)送TEND=1;//設(shè)置發(fā)送完成標(biāo)志}else{TXB=CY;//寫(xiě)CY至TX端口}}}}if((Mode==0)&&REND){REND=0;if(RBUF==0x7F){if(++Correct_nums>10){START=1;Correct_nums=0;Error_nums=0;}}else{Correct_nums=0;if(++Error_nums>6){TR0=0;Error_nums=0;Correct_nums=0;UART_Change();RING=0;REND=0;RCNT=0;TR0=1;}}}}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):定時(shí)器1中斷程序┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidtm1()interrupt3{if(IO_in)Dat|=0x01;if(++BIT8==8)//每采集8次發(fā)送一次{if(P_N)TBUF=Dat;//正向輸出elseTBUF=~Dat;//反向輸出TING=1;BIT8=0;}Dat
居然放個(gè)ATMEL的單片機(jī)。比我的好看,說(shuō)說(shuō)看,怎么實(shí)現(xiàn)邏輯分析的?
0
回復(fù)
shenx123
LV.10
5
2014-04-24 14:08

我也想做DIY板, 給我點(diǎn)建議啊

0
回復(fù)
2014-04-25 22:16
唉,我天生就喜歡看別人做實(shí)驗(yàn),樓主, 再表述的詳細(xì)點(diǎn),我收藏了
0
回復(fù)
2014-04-26 20:37
@山東大漢
唉,我天生就喜歡看別人做實(shí)驗(yàn),樓主,再表述的詳細(xì)點(diǎn),我收藏了
我覺(jué)得我描述得已經(jīng)夠了。。。稍有點(diǎn)單片機(jī)基礎(chǔ)完全OK的!
0
回復(fù)
2014-04-27 00:04
@wwpwwp20088
我覺(jué)得我描述得已經(jīng)夠了。。。稍有點(diǎn)單片機(jī)基礎(chǔ)完全OK的!
蠻好的,我比較喜歡看視頻
0
回復(fù)
2014-04-27 11:45
@178064035
[圖片]我也做了一個(gè)STC免啟動(dòng)下載板,帶邏輯分析儀??梢灾С侄喾NSTC芯片下載 //作品:STC免手動(dòng)燒寫(xiě)(自適應(yīng)波特率自動(dòng)冷啟)+簡(jiǎn)易邏輯分析儀//主控:STC15F104E//晶振:45MHz//編譯:KeiluVision4V9.50a////說(shuō)明:自適應(yīng)STC-ISP軟件最低波特率(1200bps/2400bps/4800bps)//3種模式:①自動(dòng)燒寫(xiě)(默認(rèn))【LED_key不亮:模式①,LED亮:通電,LED不亮:關(guān)電】//②邏輯分析儀(正向波形)【LED_key亮:模式②,LED亮:預(yù)備,LED不亮:采樣】//③邏輯分析儀(反向波形)【LED_key閃爍:模式③,LED亮:預(yù)備,LED不亮:采樣】//①②③模式下,系統(tǒng)板都可以正常串口通信。//②③模式下,也可以燒寫(xiě)程序(手動(dòng)燒寫(xiě)),不過(guò)正在“采樣”時(shí)請(qǐng)不要燒寫(xiě)程序以及系統(tǒng)板串口通信。////注:建議燒寫(xiě)程序時(shí)啟動(dòng)看門(mén)狗(預(yù)分頻數(shù)256,約2.2S@45MHz)////另:關(guān)于STC-ISPV4.88版本,發(fā)現(xiàn)用PL2303HX芯片燒寫(xiě)STC15系列很難成功,最低/高波特率都選用4800bps才可以燒寫(xiě)。//關(guān)于STC-ISPV6.06版本,用PL2303HX芯片燒寫(xiě)STC15系列非常好(直接用默認(rèn)的最低/高波特率),//但V6.06版本內(nèi)部R/C振蕩器最高只可以選33.1776MHz。//用FT232芯片燒寫(xiě),則通殺STC-ISP所有版本(直接用默認(rèn)的最低/高波特率)。////※江湖游客BXAK,2011/10/30//※http://hi.baidu.com/江湖游客bxak/home#include"STC15F104E.H"#include"MY_SET.h"sbitLED=P3^0;//指示燈sbitKEY=P3^1;//按鍵sbitTXB=P3^2;sbitRXB=P3^3;sbitPNP=P3^4;//PNP三極管sbitIO_in=P3^5;//分析儀采樣引腳uint8Mode;//模式bitB_init;//初始化標(biāo)志uint8KEY_Value;//按鍵消抖計(jì)數(shù)bitON;//按鍵標(biāo)志bitOver;bitLED_key;//模式指示燈(在按鍵上擴(kuò)展)uint16Count;//閃爍計(jì)數(shù)bitP_N;//正向標(biāo)志uint8BIT8,cnt,Dat;uint16Time;uint8TBUF,RBUF;//發(fā)送/接收緩存uint8TDAT,RDAT;//發(fā)送/接收數(shù)據(jù)暫存uint8TCNT,RCNT;//發(fā)送/接收計(jì)數(shù)器uint8TBIT,RBIT;//發(fā)送/接收比特?cái)?shù)bitTING,RING;//開(kāi)始發(fā)送/接收標(biāo)志bitTEND,REND;//發(fā)送/接收完成標(biāo)志bitSTART;//重啟標(biāo)志uint8Correct_nums;//『連續(xù)正確』計(jì)數(shù)器uint8Error_nums;//錯(cuò)誤累加計(jì)數(shù)器uint8Status;//波特率狀態(tài)/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):延時(shí)┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidYS(uint8n){uint8a,b,c;while(n--){for(c=66;c>0;c--)for(b=100;b>0;b--)for(a=100;a>0;a--);}}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):串口初始化┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidUART_INIT(){TING=0;RING=0;TEND=1;REND=0;TCNT=0;RCNT=0;}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):邏輯分析儀初始化┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidAnalyzer_Init(){TR1=0;TF1=0;Time=0;BIT8=0;TL0=0x7E;//初始化T0和設(shè)定重載值TH0=0xFF;//修改成115200bpsLED=0;//指示燈開(kāi)}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):自動(dòng)燒寫(xiě)模式下波特率切換(定時(shí)器0模擬)┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidUART_Change(){if(++Status>2)Status=0;switch(Status){case0:TL0=(65536-15000000/1200);TH0=(65536-15000000/1200)>>8;break;//1200bpscase1:TL0=(65536-15000000/2400);TH0=(65536-15000000/2400)>>8;break;//2400bpscase2:TL0=(65536-15000000/4800);TH0=(65536-15000000/4800)>>8;break;//4800bps}}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):重啟程序┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidRestart(){if(START){START=0;TR0=0;PNP=1;//關(guān)電LED=1;YS(10);//從『加載HEX』到『提示上電』有5秒,但不必等到『提示上電』WDT_CONR|=0x10;//清看門(mén)狗(預(yù)分頻數(shù)256,約2.2S@45MHz)PNP=0;//通電LED=0;YS(30);WDT_CONR|=0x10;//清看門(mén)狗(預(yù)分頻數(shù)256,約2.2S@45MHz)TR0=1;RING=0;REND=0;RCNT=0;}}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):主程序┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidmain(){uint8i;P33=1;WDT_CONR|=0x10;//清看門(mén)狗(預(yù)分頻數(shù)256,約2.2S@45MHz)PNP=0;//通電LED=0;LED_key=1;//關(guān)for(i=0;i>8;UART_Change();TR0=1;EA=1;ET0=1;PT0=1;//提高T0的中斷優(yōu)先級(jí)ET1=1;UART_INIT();Mode=0;while(1){switch(Mode){case0:if(B_init){B_init=0;TR1=0;PNP=0;//通電LED=0;UART_Change();UART_INIT();}Restart();LED_key=1;break;case1:if(B_init){B_init=0;P_N=1;Analyzer_Init();}if(!IO_in){TR1=1;LED=1;}//啟動(dòng)定時(shí)器1,采樣開(kāi)始if(Over){Over=0;if(++Time>3320)Analyzer_Init();//約16.6秒(5ms*3320),即每次采集完,過(guò)4秒(16.6S-12.6S)后重新工作}LED_key=0;break;case2:if(B_init){B_init=0;P_N=0;Analyzer_Init();}if(!IO_in){TR1=1;LED=1;}if(Over){Over=0;if(++Time>3320)Analyzer_Init();}if(++Count>10000){Count=0;LED_key=!LED_key;}//閃爍break;default:Mode=0;break;}//按鍵檢測(cè)KEY=1;//拉高電平NOP12();//稍微延時(shí)if(!KEY){if(ON==0)KEY_Value++;if(KEY_Value>200){KEY_Value=0;ON=1;//按鍵標(biāo)志置“1”if(++Mode>2)Mode=0;B_init=1;//『初始化標(biāo)志』置“1”}}else{KEY_Value=0;ON=0;}//恢復(fù)指示燈狀態(tài)if(LED_key)KEY=1;elseKEY=0;WDT_CONR|=0x10;//清看門(mén)狗(預(yù)分頻數(shù)256,約2.2S@45MHz)}}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):定時(shí)器0中斷程序,模擬串口┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidtm0()interrupt1using1{if(RING){if(--RCNT==0){RCNT=3;//復(fù)位接收波特率計(jì)數(shù)器if(--RBIT==0){RBUF=RDAT;//保存數(shù)據(jù)到RBuf管理RING=0;//停止接收REND=1;//設(shè)置接收完成標(biāo)志}else{RDAT>>=1;if(RXB)RDAT|=0x80;//RX數(shù)據(jù)轉(zhuǎn)移到RX緩沖區(qū)}}}elseif(!RXB)//是否檢測(cè)到低電平{RING=1;//設(shè)置開(kāi)始接收標(biāo)志RCNT=4;//初始接收波特率計(jì)數(shù)器RBIT=9;//初化始接收比特?cái)?shù)(8個(gè)數(shù)據(jù)位+1個(gè)停止位)}if(--TCNT==0){TCNT=3;//復(fù)位發(fā)送波特率計(jì)數(shù)器if(TING)//判斷是否發(fā)送{if(TBIT==0){TXB=0;//發(fā)送起始位TDAT=TBUF;//加載數(shù)據(jù)從TBUF至TDATTBIT=9;//初化始發(fā)送比特?cái)?shù)(8位數(shù)據(jù)位+1個(gè)停止位)}else{TDAT>>=1;//位移數(shù)據(jù)至CYif(--TBIT==0){TXB=1;TING=0;//停止發(fā)送TEND=1;//設(shè)置發(fā)送完成標(biāo)志}else{TXB=CY;//寫(xiě)CY至TX端口}}}}if((Mode==0)&&REND){REND=0;if(RBUF==0x7F){if(++Correct_nums>10){START=1;Correct_nums=0;Error_nums=0;}}else{Correct_nums=0;if(++Error_nums>6){TR0=0;Error_nums=0;Correct_nums=0;UART_Change();RING=0;REND=0;RCNT=0;TR0=1;}}}}/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函數(shù):定時(shí)器1中斷程序┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/voidtm1()interrupt3{if(IO_in)Dat|=0x01;if(++BIT8==8)//每采集8次發(fā)送一次{if(P_N)TBUF=Dat;//正向輸出elseTBUF=~Dat;//反向輸出TING=1;BIT8=0;}Dat
謝謝提供代碼。。。
0
回復(fù)
2014-06-26 13:43

我自己也做個(gè)幾條,現(xiàn)在不記得了,反正插在串口就可以反復(fù)直接下載程序。

板上加了個(gè)MOS,用來(lái)延時(shí)控制輸出5V

0
回復(fù)
wwpwwp20088
LV.5
11
2014-06-27 19:32
@賀赫無(wú)名
我自己也做個(gè)幾條,現(xiàn)在不記得了,反正插在串口就可以反復(fù)直接下載程序。板上加了個(gè)MOS,用來(lái)延時(shí)控制輸出5V
其實(shí)繼電器、三極管、MOS。。。。只要是開(kāi)關(guān)元件都行,我手頭有個(gè)小繼電器沒(méi)用就圖方便焊上去了,可以聽(tīng)見(jiàn)滴答聲比較舒服。。。呵呵。。
0
回復(fù)
2014-07-20 10:40
 

有償求數(shù)字電流電壓表,要求如下:

空間器件排放要求

1:在25mm(長(zhǎng))*28mm(寬)這個(gè)區(qū)域內(nèi)左邊放三個(gè)數(shù)碼管,從下向上,一次放三個(gè)數(shù)碼管。

2:在最下面數(shù)碼管下面放兩個(gè)發(fā)光二極管,分別是“V”“A

3:在這個(gè)區(qū)域內(nèi)右邊放三個(gè)按鍵,從下向上,一次放三個(gè)按鍵,分別是“向上”“向下”“循環(huán)”

器件要求:

1:數(shù)碼管盡可能小,三個(gè)單獨(dú),或者三個(gè)一起的,共陰共陽(yáng)無(wú)要求。

2:使用ST公司單片機(jī)STM8S003F3P6TR

3:器件在市場(chǎng)上容易買到。

技術(shù)條件:

1:輸入電壓為DC10V~DC14V,精度小數(shù)點(diǎn)后一位。

2:環(huán)境溫度-2540

3顯示電流0A-4A,精度小數(shù)點(diǎn)后兩位。

軟件要求:

1:默認(rèn)顯示輸出電流值,點(diǎn)亮“A”發(fā)光二極管。

2:按一下鍵“循環(huán)”,顯示輸出電壓值,點(diǎn)亮“V”發(fā)光二極管

3:再按一下鍵“循環(huán)”,就輪流顯示輸出電壓電流

4:按一下鍵“向上”,能夠調(diào)高輸出電壓,每次0.1V,一直可以調(diào)節(jié)到DC14V,再按向上鍵,無(wú)效。

5:按一下鍵“向下”,能夠調(diào)低輸出電壓,每次0.1V,一直可以調(diào)節(jié)到DC10V,再按向下鍵,無(wú)效。

6485通信接口,通過(guò)AB可以讀取輸出電壓輸出電流,也調(diào)節(jié)輸出電壓。

成本要求:

1:低于8元。

工藝要求:

便于加工。

有意者聯(lián)系QQ67418420,價(jià)格面議。

0
回復(fù)
發(fā)