㈠ 合泰背單片機在程序中如何實現按鍵,短按加一,長按快加拜教高手,謝謝先!
合泰背?沒聽過,不過沒所謂,演算法都一樣,按鍵少的時候可以直接掛在IO口上,另一端接地,程序中檢測IO狀態,若有0則說明有按鍵按下,此時變數加1,然後進入鬆手檢測,在其中設置時間標志,若經過幾秒鍾還是按下狀態,則變數一直加,祝成功~~
㈡ 合泰的單片機用C語言如何把一個變數定位到指定ROM地址 比如:const unsigned char mydata @0x300;
ROM是保存指令和常量的地方,不是存變數的地方;
如果是訪問flash之類的可擦寫ROM可以當成是外部RAM使用,一般通過absacc.h
里的XBYTE[addr] 來定義外部地址的。
PS:如果是常量需要保存到ROM的指定地址,查看項目文件下的*.m51文件,裡面有程序段及常數段的地址分配,修改code memory 下的BASE(起始地址、基地址)和LENGTH(長度、位元組數)值,可以指定程序段或常量的ROM地址。
㈢ 合泰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的初值。
㈣ 敬愛的合泰單片機高手!!!!!!!
1.怎樣用軟體設置:CMOSE輸出,帶或不帶上拉電阻的斯密特觸發輸入,A/D輸入????
輸出就是輸出,什麼"CMOS輸出"是Holtek官方術語,"斯密特觸發輸入"也是官方術語,帶不帶上拉電阻是在IDE掩膜選項中設置的
引腳是AD輸入還是數字IO靠ADCR中的控制位來定義
2.怎樣理解ADCR中的前六位設置???當設置好模義輸入通道,為什麼還要定義PB呢????
這是HT46R52的ADCR 參考(估計HT46R22是一樣的):
0 ACS0 選擇模擬輸入通道
1 ACS1 選擇模擬輸入通道
2 ACS2 選擇模擬輸入通道
3 PCR0 為0 則關閉,減小功耗
4 PCR1 為0 則關閉,減小功耗
5 PCR2 為0 則關閉,減小功耗
6 EOC A/D 轉換結束標志(0:A/D 轉換結束)
每次bit3-5 狀態的改變後都必須通過START 信號來初始化A/D 轉換器,
否則EOC可能會處於不確定狀態
7 START 0→1→0:開始; 0→1:A/D 轉換復位並且置EOC為「1」
「當設置好模義輸入通道,為什麼還要定義PB呢????」
前面0-2隻是個通道選擇(多選1模擬開關),並不能決定PB口是模擬口還是數字IO
就像有一塊內存空間,你選中了一個位元組來用,但裡面的內容到底什麼不知道,設置一下就知道了。
3.埠問題:
1.控制寄存器:設定IO口是輸入還是輸出,數據寄存器(埠寄存器)讀取/設置埠電平
2.設_pac=0b00000000;意思是pa口全部輸出;設_pa= 0b00000000;則pa全部輸出0
3.初始化埠的步驟示例:_pac=0x00; _pa=0x00;
4.其他問題:
#pragma vector isr_time @ 0x08 //中斷服務程序定義
#pragma vector isr_ad @ 0x0c //中斷服務程序定義
uchar sign0 @ 0x40; //在絕對地址定義變數
uchar sign1 @ 0x41; //在絕對地址定義變數
㈤ 合泰單片機內置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
㈥ 有沒有大神用過合泰的單片機 HT68F002 這款想晶元啊 求個用中斷的程序,自己怎麼弄都不行 幫忙看一下吧
定時器中斷函數里沒清除標志位。增加_stm0f=0
缺少_rstc=0b01010101
㈦ 合泰單片機的中斷優先順序如何設置
設置中斷優先順序的函數,CMISIS已經寫好,並嵌入到了編譯器中。
1. PWM的測量放到主程序循環中去做,在中斷程序中僅僅完成定時修正,把PWM設定為高優先順序,這樣可以提高中斷的響應速度,使得程序的實時性較高;2. 串口一般是屬於較慢的中斷,它的響應時間只要滿足能夠在接收一個位元組的時間內響應一次即可,因此可以設為低等級中斷,並且在串口程序中不要進行數據處理,只要完成接收數據轉移到接收緩存池中即可,在主程序中去完成數據的分析處理工作。
㈧ 如何用C語言改變合泰單片機自帶PWM的頻率,如1KHZ,2KHZ,等等頻率
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
sbit Waveout1=P1^0;
sbit CF=P3^2;//調節頻率
int num,a,f;
int Timer0_H,Timer0_L;
void Init()
{
num=0;
a=1000;
f=2;
Waveout1=0;
TMOD=0x02;
TH0=(uint)(256-(1000/(2*f)));
TL0=(uint)(256-(1000/(2*f)));
ET0=1;
EA=1;
TR0=1;
}
void main()
{
Init();
while(1)
{
if(CF==0)
{
f++;
TH0=(int)(256-(1000/(2*f)));
TL0=(int)(256-(1000/(2*f)));
while(CF==0);
}
if(num==a)
{
num=0;
Waveout1=~Waveout1;
}
}
}
void Timer0()interrupt 1
{
num++;
}