A. 合泰單片機內置eeprom只能讀不能寫,要怎麼解決
我也遇到這樣的問題。沒人給出答案,我來說一下吧。(主要是針對V3編譯C)
根據Holtek_C_Compiler_V3_FAQ(950).pdf的描述,V3不保證編譯後的指令符合EEPROM寫入順序。根據BS86的數據手冊,WREN 和 WR一定要符合順序。
我編譯後的指令出現的是LSET WREN以及LSET WR,這個就出問題了。晶元需要的是SET。
解決方法是根據官方FAQ的描述
"5.5 對於寫 EEPROM 有限制的 MCU ( 需連續 set wren, wr, flag),如何使用
V3 寫 EEPROM?"
下面是代碼
//RefertoHoltek_C_Compiler_V3_FAQ(950).pdf
typedefstruct{
unsignedcharbit0:1;
unsignedcharbit1:1;
unsignedcharbit2:1;
unsignedcharbit3:1;
unsignedcharbit4:1;
unsignedcharbit5:1;
unsignedcharbit6:1;
}iar_bits;
DEFINE_SFR(iar_bits,iar1,0x02);
#defineiar1_3 iar1.bit3
#defineiar1_2 iar1.bit2
#defineiar1_1 iar1.bit1
#defineiar1_0 iar1.bit0
...
uint8_tbkup;
_eea=u8Addr;
_eed=u8NewData;
_mp1l=0x40;
bkup=_mp1h;
_mp1h=0x01;
_emi=0;
iar1_3=1;
iar1_2=1;
_emi=1;
while(iar1_2)
{
}
_iar1=0;
_mp1h=bkup;
...
官方的解決方案產生的代碼跟數據手冊中的一直:
;129 iar1_3=1;
0D0D 3182 set__iar1[0].3《《以前這里是LSETWREN
;130 iar1_2=1;
0D0E 3102 set__iar1[0].2《《以前這里是LSETWR
B. 合泰單片機模擬軟體(HT-IDE3000)無法識別到模擬EV
是不是聯線錯了 聯線錯誤就會顯示連接成功 但是不識別晶元
C. 請問工程開發這一塊的朋友談一談:合泰單片機用在產品上怎麼樣
電子產品項目中對單片機的選型,可謂仁者見仁智者見智。合泰單片機價格適中,種類也比較齊全。不敢說對合泰單片機情有獨鍾,但本人確實在幾個項目種使用過合泰單片機,與其它曾經用過的單片機比較,沒找到什麼特別的感覺,也沒有遇過到什麼特別不順的事,在這里實言相告,僅供參考。
D. 學什麼單片機好學單片機怎麼樣能賺錢嗎有前途嗎
先學51單片機,可以看看學習視頻,對於每個人來說,多學習一種技能 可以拓寬 就業渠道,
單片機學習可以先學習一些模擬示例,如
#include<reg51.h>
#define uchar unsigned char
uchar temp;
int key1,key,disbuf;// 此表為 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f
unsigned char code LED7Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
unsigned char ledx[8];
uchar t,j,i;
bit s0,s1;
void scan() //要是按鍵了,掃描鍵盤編碼值
{
P1=0xF0;
for(j=0;j<250;j++);
temp=P1;
switch(temp)
{
case 0xe0: key1=0; //
break;
case 0xd0: key1=1; //
break;
case 0xb0: key1=2; //
break;
case 0x70: key1=3; //
break;
}
P1=0x0f;
for(j=0;j<250;j++)
temp=P1;
switch(temp)
{
case 0x0E: key=key1+0;
break;
case 0x0D: key=key1+4;
break;
case 0x0B: key=key1+8;
break;
case 0x07: key=key1+12;
break;
default : key=-1;
}
if((key1+1)&&(key+1)) disbuf=key;
}
void ejjc() //判斷是否按鍵
{
P1=0xF0;
if(P1!=0xF0) { scan();s0=1;}
else { s0=0; s1=1;}
}
void main()
{
TMOD=0x51; // T1 外部計數
TH0=(65535-2000)/256;
TL0=(65535-2000)%256;
EA=1;
ET0=1; //開定時器0中斷
ET1=1; //開定時器1中斷
TR0=1; //啟動定時器0
TR1=1; //啟動定時器1
while(1)
{
ejjc();
if(s0==1 && s1==1)
{
s0=0;s1=0;
for(i=0;i<8;i++)
{ ledx[i]=ledx[i+1]; ledx[8]=disbuf; }
}
}
}
void timer0() interrupt 1
{
TH0=(65535-2000)/256;
TL0=(65535-2000)%256;
P0=0xff;
switch(t)
{
case 0: P2=LED7Code[ledx[0]]; P0=0xfe;break;
case 1: P2=LED7Code[ledx[1]]; P0=0xfd;break;
case 2: P2=LED7Code[ledx[2]]; P0=0xfb;break;
case 3: P2=LED7Code[ledx[3]]; P0=0xf7;break;
case 4: P2=LED7Code[ledx[4]]; P0=0xef;break;
case 5: P2=LED7Code[ledx[5]]; P0=0xdf;break;
case 6: P2=LED7Code[ledx[6]]; P0=0xbf;break;
case 7: P2=LED7Code[ledx[7]]; P0=0x7f;break;
}
t++;
if(t==8) t=0;
}
E. 合泰ht46f49e單片機
1、51單片機計數器的脈沖輸入腳。主要的脈沖輸入腳有Px,y, 也指對應T0的P3.4和對應T1的P3.5,主要用來檢測片外來的脈沖。而引腳18和19則對應著晶振的輸入脈沖,脈沖的頻率和周期為
F = f/12 = 11.0592M/12 = 0.9216MHZ T = 1/F = 1.085us
2、定時器有兩種工作模式,分別為計數模式和定時模式。對Px,y的輸入脈沖進行計數為計數模式。定時模式,則是對MCU的主時鍾經過12分頻後計數。因為主時鍾是相對穩定的,所以可以通過計數值推算出計數所經過的時間。
3、51計數器的計數值存放於特殊功能寄存器中。T0(TL0-0x8A, TH0-0x8C), T1(TL1-0x8B, TH1-0x8D)
4、TLx與THx之間的搭配關系
1)、TLx與THx之間32進制。即當TLx計到32個脈沖時,TLx歸0同時THx進1。這也稱為方式0。
2)、TLx與THx之間256進制。即當TLx計到256個脈沖時,TLx歸0同時THx進1。這也稱為方式1。在方式1時,最多計65536個脈沖產生溢出。在主頻為11.0592M時,每計一個脈沖為1.085us,所以溢出一次的時間為1.085usx65536=71.1ms。
3)、THx用於存放TLx溢出後,TLx下次計數的起點。這也稱為方式2。
4)、THx與TLx分別獨立對自己的輸入脈沖計數。這也稱為方式3。
5、定時器初始化
1)、確定定時器的計數模式。
2)、確定TLx與THx之間的搭配關系。
3)、確定計數起點值。即TLx與THx的初值。
F. 合泰單片機視頻教程
合泰單片機大部分是51內核,合泰單片機陳本低但是資料少是目前產品設計使用較多教學用膠少,可以先學習其他有視頻教程的51內核單片機再學合泰