找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4803|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

TFT彩屏SPI驅(qū)動(dòng)編程-基于STC32G12K128單片機(jī)的SPI_DMA功能的例程分享

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
Spi接口的接線,分四線制和三線制,據(jù)說SPI協(xié)議沒有確定的文字規(guī)定,只有實(shí)事的實(shí)現(xiàn)方案,而行業(yè)內(nèi)的現(xiàn)狀則是眾說紛紜,我大概把它們分為兩類,一類是按實(shí)際用了幾條線實(shí)現(xiàn)傳輸,一類是按信號(hào)傳遞格式來劃分。具體到屏顯驅(qū)動(dòng)來講,凡是接口有獨(dú)立的數(shù)據(jù)/命令(RS.DC.A0等叫法都有)接線的,屬于我們適用的范圍,具體用了幾條線,我數(shù)學(xué)不好,就不去數(shù)了。這不是說沒有數(shù)據(jù)/命令選擇線的不能用,反而是那種可能更有用這種驅(qū)動(dòng)模式的需要,但我手里沒有這樣的屏,對(duì)不熟悉,沒驗(yàn)證的東西,就不去評(píng)論了。
SPI接口的TFT彩屏在mcu工程里是常見的。其優(yōu)點(diǎn)是接線方便,占用IO        口少,色彩豐富。缺點(diǎn)是速度會(huì)慢些,一方面是因?yàn)椴势溜@示需要的數(shù)據(jù)量大,單色屏一個(gè)字節(jié)可以包涵8個(gè)點(diǎn)的顯示信息,而彩屏一個(gè)點(diǎn)就需要二個(gè)字節(jié)的信息。另一方面是它屬于串口傳輸,并口傳輸一次可以送出8到16位信息,而串口一次只能送出一位信息,信息量大加傳輸慢,就成了SPI接口彩屏的一個(gè)短板。特別是在屏的顯示點(diǎn)數(shù)多時(shí),尤其明顯。
記得DMA技術(shù)剛問世時(shí)是用在PC機(jī)上,當(dāng)時(shí)經(jīng)銷商把它當(dāng)賣點(diǎn),用戶則花錢買功能。只要花了錢,就能用上這個(gè)功能了。
但在mcu領(lǐng)域有些不同,DMA技術(shù)不僅需要芯片功能上支持,還需要技術(shù)人員愿意去用。一些學(xué)成的技術(shù)人員因?yàn)楣ぷ髅Γ鎸?duì)的問題又能用傳統(tǒng)手段解決,使用DMA的動(dòng)力就不足了。而新人由于感覺這東西有些難弄,也不愿用。
本文說的TFT彩屏SPI驅(qū)動(dòng)的編程,是基于DMA功能的SPI彩屏驅(qū)動(dòng)程序,因?yàn)镾PI接口慢,所以使用DMA的意義更大。由于STC32G12K128芯片具有DAM功能,所以就以這個(gè)芯片為依托,寫了一組SPI接口的驅(qū)動(dòng)程序,這個(gè)模式的程序,能加快刷屏速率,很大地提高芯片的工作效率。
下面先看一下SPI接口驅(qū)動(dòng)中最基本的函數(shù),數(shù)據(jù)傳送函數(shù)。分別是軟件模擬SPI傳送,硬件SPI數(shù)據(jù)傳送和基于SPI_DMA的數(shù)據(jù)傳送函數(shù)
第一個(gè):軟件模擬SPI數(shù)據(jù)傳送函數(shù)
void transfer_data(unsigned int data1)//需要傳送命令時(shí)加DC=0
{
char i;
CS=0;
for(i=0;i<8;i++)
{
SCL=0;//sclk=0;
//delay(4);
if((data1&0x80)==0) SDA=0;//sid=1;
else SDA=1;//sid=0;
SCL=1;//sclk=1;
data1=data1<<=1;
// delay(4);
}
// CS=1;
}
第二個(gè):硬件SPI數(shù)據(jù)傳送函數(shù)
void transfer_data(unsigned int data1)//需要傳送命令時(shí)加DC=0
{
CS=0;
SPSTAT=0xc0;
SPDAT=data1;
while(!SPIF);//等待發(fā)送完成
}
第三個(gè):基于SPI_DMA的數(shù)據(jù)傳送函數(shù)
void transfer_data(unsigned int dat1)
        {
CS=0;
DMASPI_initial();//這一句不是必須的,為了保險(xiǎn),我喜歡加上這一句
        *(unsigned char *)(0x10000)=dat1;//待傳送數(shù)據(jù)送專用緩存區(qū),就是buffer1
        DMA_SPI_CR=0xc1;//開始執(zhí)行,采用主機(jī)模式,并清空FIFO,
while(!(DMA_SPI_STA&0x01));
}
顯然,軟件模擬SPI傳送函數(shù)比較麻煩,速度也慢很多,但它的優(yōu)點(diǎn)是對(duì)mcu硬件依賴少,基本可以在任何IO口實(shí)現(xiàn),所以屏的賣家愿意用它寫的測(cè)試驅(qū)動(dòng)。
硬件SPI的數(shù)據(jù)傳送函數(shù)就很給力了。與SPI_DMA的數(shù)據(jù)傳送比,寫入數(shù)據(jù)后自動(dòng)開始傳送,而后者寫入數(shù)據(jù)與啟動(dòng)傳送是兩個(gè)語句,并且硬件SPI也是外設(shè)接口,就是說它運(yùn)行時(shí)有相對(duì)的獨(dú)立性,對(duì)mcu的依賴較少,所以很棒,而基于SPI_DMA的數(shù)據(jù)傳送函數(shù),語句多了,而且還要有專門緩沖區(qū)配合,在單個(gè)數(shù)據(jù)傳送上,不如硬件SPI的傳送函數(shù)便捷。
需要說明,基于DMA的SPI接口彩屏驅(qū)動(dòng),必須使用(開啟)硬件SPI功能。這是前提條件。
在具體的應(yīng)用中,傳送函數(shù)用硬件SPI的和用SPI_DAM的都可以,但既然硬件SPI的傳送函數(shù)很好用了,SPI_DMA的傳送函數(shù)寫出來更多是象征性的了。表示可行,但不表示必須用。SPI_DMA的長項(xiàng)在批量數(shù)據(jù)傳送上。
這里說了半天一是介紹一下情況,二是表明兩個(gè)函數(shù)的兼容性:
基于SPI_DMA數(shù)據(jù)傳送函數(shù)的程序,使用硬件SPI傳送函數(shù)都可以順暢運(yùn)行
反過來
基于硬件SPI數(shù)據(jù)傳送函數(shù)的程序,在SPI_DMA傳送函數(shù)下不一定能運(yùn)行
原因是緩沖區(qū)可能出問題。也可以說話程序?qū)懙牟粔蚝。我盡量采用SPI_DMA做依托寫函數(shù),運(yùn)行時(shí)使用硬件SPI支持。
下面是圖像顯示函數(shù),這是SPI_DMA技術(shù)的強(qiáng)項(xiàng)。
void SPI_DMA_DISP(unsigned int x,unsigned int y,unsigned int x_width,unsigned int y_height,unsigned int total_num,unsigned int once_num,unsigned char *p,unsigned char *Q)
{
unsigned int ii,jj;
unsigned long kee;
unsigned char *kkee;
kkee=Q;//保存入口地址,方便指針復(fù)位時(shí)使用
lcd_address(x,y,x_width-1,y_height-1);//通知屏幕需要刷圖的位置,這個(gè)指令要盡量往前放,因?yàn)槠渲杏玫綌?shù)據(jù)傳送,會(huì)影響傳送參數(shù)的設(shè)置。
kee=(unsigned long)(Q);//取緩沖區(qū)首地址的值,也就是打算發(fā)送給屏幕的數(shù)據(jù)源地址的值(緩沖區(qū)首地址是1:0000H。所以習(xí)慣用long類型變量)
DMA_SPI_TXAH=(kee)>>8;//把源地值高位賦給地址寄存器
DMA_SPI_TXAL=kee;//在xdata的起始地址01:0002H
DMA_SPI_AMTH=(once_num-1)>>8;
DMA_SPI_AMT=(once_num-1);
for(ii=0;ii<(total_num/once_num);ii++)//total_num/once_num必須是個(gè)整數(shù),否則要做處理
{
for(jj=0;jj<once_num;jj++)//把要送屏的數(shù)據(jù)寫入指定的緩沖數(shù)組
{
*Q=*p;//傳送圖像數(shù)據(jù),p指向code區(qū)的圖像數(shù)組,Q指向緩沖區(qū)buffer2
p++;
Q++;
}
        Q=kkee;//傳送一輪后,緩沖區(qū)指針復(fù)位。
        //把緩沖區(qū)的數(shù)據(jù)送到屏上顯示               
        DMA_SPI_STA=0;//清中斷標(biāo)志位及錯(cuò)誤標(biāo)志位
        DMA_SPI_CR=0xc1;//開始執(zhí)行,采用主機(jī)模式,并清空FIFO,        while(!(DMA_SPI_STA&0x01));//等待吧。這時(shí)可以做其它事,比如去讀一個(gè)AD值,
}
DMASPI_initial();//這是多余的指令,原想加了它可以省去數(shù)據(jù)傳送函數(shù)中的初始化
}
程序的思路是設(shè)置了兩個(gè)指針,一個(gè)指向存放圖像信息數(shù)組的頭文件*p;一個(gè)指向緩沖區(qū)存放臨時(shí)數(shù)據(jù)*Q。后者也是向屏輸出圖像信息的源地址。緩沖區(qū)必須設(shè)在xdata區(qū)。由于空間限制,要分幾次才能傳輸完總數(shù)據(jù)。所以設(shè)置了總數(shù)據(jù)量和每次數(shù)據(jù)量這兩個(gè)參數(shù)。運(yùn)行時(shí)先把數(shù)據(jù)送到緩沖區(qū),再啟動(dòng)SPI_DMA功能,把數(shù)據(jù)送屏顯示。完成一組再進(jìn)行第二組。直到全部傳送完。
程序的優(yōu)點(diǎn)是啟動(dòng)SPI_DMA后,mcu基本處于空閑狀態(tài),可以去做其它事了,傳送由外設(shè)自己管理,你只要不去干涉它用到的資源就好(相關(guān)總線,特別是緩沖區(qū))也就是說在它完成任務(wù)前,不要下達(dá)與屏顯有關(guān)的指令。下一個(gè)SPI_DMA指令,也要在前面的確定執(zhí)行完后才能下達(dá)。
這個(gè)程序特點(diǎn)是每傳送完一輪,緩沖區(qū)指針Q都要復(fù)位一次,而p不需要,因?yàn)榫彌_區(qū)是重復(fù)使用的。
這個(gè)程序能給mcu節(jié)省多少時(shí)間?我沒測(cè)量過,只是用delay();函數(shù)看了一下,要用多大的參數(shù)值,能保證SPI_DMA完成任務(wù)。就是使用延時(shí)函數(shù)替代程序中的等待查詢指令?纯葱枰嗌傺訒r(shí)能替代那個(gè)等待。
void delay(unsigned int ms)
{
int j,k;
for(j=0;j<ms;j++)
for(k=0;k<60;k++);
}
結(jié)果在delay(11111)時(shí),圖像完全不顯示(說明傳送過程被完全打亂了),在delay(33333)時(shí)顯示基本正常了。我認(rèn)為,這就是SPI_DMA節(jié)省出來的時(shí)間,而且是一輪傳送節(jié)省的時(shí)間。120x120的圖像用了五輪傳送。
接下來是字模顯示函數(shù)。
先貼一個(gè)使用普通字模數(shù)組的字模顯示函數(shù):
void word16x32_bydma_spi(unsigned int x,unsigned int y,unsigned char segin,int font_color,int back_color,char *Q)
{
unsigned char column=0;
unsigned char tm=0,temp;
unsigned long kee;
char *point;
char *kkee;
kkee=Q;//這是保留緩沖區(qū)指針初值      
point=digit_code[segin];//把要顯示的數(shù)字(segin)轉(zhuǎn)換成對(duì)應(yīng)的字模地址point
//先把字模數(shù)據(jù)轉(zhuǎn)換成屏顯所用數(shù)據(jù)存到緩沖區(qū),因?yàn)閷懭刖彌_區(qū)是并行處理,且沒有其它操作。所以比寫屏快很多
for(column=0;column<64;column++)//字節(jié)數(shù)循環(huán),逐個(gè)字節(jié)進(jìn)行轉(zhuǎn)換
{
temp=*point;//*point是原字模數(shù)據(jù)指針,取出原字模數(shù)值
//把字節(jié)信息換算成屏需要的數(shù)據(jù),送到緩沖區(qū)
for(tm=0;tm<8;tm++)
{
if(temp&0x01)//注意這是低位先出模式,如果與字模不符,可以考慮改為高位先出模式
{
*Q=(font_color>>8);//Q是緩沖區(qū)指針
Q++;
*Q=(font_color);
Q++;
}
else
{
*Q=(back_color>>8);
Q++;         
*Q=(back_color);
Q++;
}
temp>>=1;
}
  point++;
}
//開始刷屏,因?yàn)橛蒁MA_SPI操作,基本不需要占用mcu時(shí)間。
lcd_address(x,y,x+15,y+31);      
kee=(unsigned int)(kkee);//取緩沖區(qū)首地址的值,也就是打算發(fā)送給屏幕的數(shù)據(jù)源地址的值
DMA_SPI_TXAH=(kee)>>8;//把源地值高位賦給地址寄存器
DMA_SPI_TXAL=kee;//地址是xdata的起始地址
DMA_SPI_AMTH=3;//0x03,表示的傳送總數(shù)據(jù)量是3ffh+1,也就是1024
DMA_SPI_AMT=255;//0xff
Q=kkee;//緩沖區(qū)指針復(fù)位
DMA_SPI_STA=0;//清中斷標(biāo)志位及錯(cuò)誤標(biāo)志位
DMA_SPI_CR=0xc1;//開始執(zhí)行,采用主機(jī)模式,并清空FIFO,這句明顯要跟著程序走的
while(!(DMA_SPI_STA&0x01));//等待吧。這時(shí)可以做其它事
DMASPI_initial();//
}
字模顯示函數(shù)的編寫思路是,字模數(shù)組放在code區(qū)的頭文件數(shù)組中。使用時(shí)查到需要字模,讀取后轉(zhuǎn)換成屏顯需要的數(shù)據(jù),再存到緩沖區(qū)。然后開啟SPI_DMA刷到屏幕上。讀取和轉(zhuǎn)換程序與其它人寫的程序一樣,照抄的。區(qū)別就是轉(zhuǎn)換完后不是直接送屏顯示,而是送到了緩沖區(qū),再由SPI_DMA統(tǒng)一送屏。SPI_DMA刷屏則與前面的圖像顯示一樣。這個(gè)函數(shù)的優(yōu)點(diǎn)是不需要專門制作字模,過去的字模軟件可以直接用(臉紅的說一句,我沒用過硬件字庫)。
既然用了SPI_DMA,就會(huì)考慮能不能最大限度的發(fā)揮其作用,于是寫了一個(gè)SPI_DMA專用的字模顯示程序。由于沒有準(zhǔn)備字模,又寫了一個(gè)專用字模數(shù)據(jù)的生成函數(shù)。生成專用字模后,放在緩沖區(qū),就可以由專用顯示函數(shù)使用了。
void matrix_produce8x16(unsigned int font_color,unsigned int back_color)
{
char *Q;
unsigned char *point;
unsigned char column;
unsigned char temp,tm;
Q=&buffer3[0][0];//緩沖指針指向數(shù)字字模專用緩沖區(qū)buffer3
point=&number0_9_8x16[0][0];//8x16數(shù)字字模數(shù)組
for(column=0;column<160;column++)//字節(jié)數(shù)循環(huán),逐個(gè)字節(jié)進(jìn)行轉(zhuǎn)換
{
temp=*point;//*point是原字模數(shù)據(jù)指針,取出原字模數(shù)值
//把字節(jié)信息換算成屏需要的數(shù)據(jù),送到緩沖區(qū)
for(tm=0;tm<8;tm++)
{
if(temp&0x01)//注意這是低位先出模式,如果與字模不符,可以考慮改為高位先出模式
{
*Q=(back_color>>8);//Q是緩沖區(qū)指針
Q++;
*Q=(back_color);
Q++;
}
else
{
*Q=(font_color>>8);
Q++;         
*Q=(font_color);
Q++;
}
temp>>=1;
}
point++;
}
DMASPI_initial();//
}
專用字模顯示函數(shù)其實(shí)就是把普通字模全部轉(zhuǎn)換成顯示所用的字模數(shù)據(jù),放在緩沖區(qū)專用位置,供需要時(shí)讀取使用,由于緩沖區(qū)空間有限,只能供占空間不大,需要頻繁調(diào)用的字模采用。例程中是把0-9這十個(gè)8x16的數(shù)字轉(zhuǎn)換進(jìn)去了。屏幕上很小的那個(gè)字就是用它顯示的。
下面是專用字模調(diào)用程序
void word8x16_bydma_spi(unsigned int x,unsigned int y,unsigned char segin)
{
unsigned long kee;
lcd_address(x,y,x+7,y+15);      
kee=(unsigned long)(&buffer3[segin][0]);//取緩沖區(qū)首地址的值,也就是打算發(fā)送給屏幕的數(shù)據(jù)源地址的值
DMA_SPI_TXAH=(kee)>>8;//把源地值高位賦給地址寄存器
DMA_SPI_TXAL=kee;//地址是xdata中對(duì)應(yīng)數(shù)字的起始地址
DMA_SPI_AMTH=0;//0x00,表示的傳送總數(shù)據(jù)量是ffh+1,也就是256
DMA_SPI_AMT=255;//0xff
DMA_SPI_STA=0;//清中斷標(biāo)志位及錯(cuò)誤標(biāo)志位
DMA_SPI_CR=0xc1;//開始執(zhí)行,采用主機(jī)模式,并清空FIFO,
while(!(DMA_SPI_STA&0x01));//等待吧。這時(shí)可以做其它事,                DMASPI_initial();//冗余指令
}
這程序不僅形式上簡潔多了,速度也快,特別是極少使用mcur 。
有了圖像和字符顯示,缺少的就是曲線了。橫平豎直的線太容易,不想寫了。曲線由于個(gè)人水平原因,沒找到能提高效率的思路,只好作罷。
使用SPI_DMA技術(shù),最大的不同在于要規(guī)劃和使用緩沖區(qū)。就是xdata區(qū)的那些空間,
我為了做驗(yàn)證,在例程中設(shè)了三個(gè)數(shù)組,做為緩沖區(qū);buffer1兩個(gè)字節(jié),作用是占位,在整個(gè)程序中沒有出現(xiàn)調(diào)用它的指令,占位的意思是不讓其它函數(shù)使用這個(gè)空間,留給數(shù)據(jù)傳輸函數(shù)專用,(其實(shí)這樣做是沒必要的,只是驗(yàn)證實(shí)驗(yàn)中期望把數(shù)據(jù)傳輸函數(shù)效率做到最高,才給它留了一個(gè)最佳緩沖地址)c251內(nèi)存空間是自動(dòng)安排的,不占位的話其它程序可能會(huì)來使用,使整個(gè)程序亂序。數(shù)據(jù)傳送函數(shù)使用buffer1時(shí)的語句是:
        *(unsigned char *)(0x10000)=dat1;//待傳送數(shù)據(jù)送專用緩存區(qū),就是buffer1
這樣做是因?yàn)閎uffer1要占住位置,只能設(shè)置在mai.c程序的模塊里,而我采用模塊化編程,數(shù)據(jù)傳送函數(shù)是在驅(qū)動(dòng)模塊中的。這時(shí)不方便用數(shù)組名buffer1訪問。
第二個(gè)數(shù)組buffer2用了5600字節(jié)用來臨時(shí)存放傳送的圖像數(shù)據(jù),其實(shí)實(shí)際使用時(shí)臨時(shí)數(shù)據(jù)是5760字節(jié),超過了安排的緩沖區(qū),也就是侵占了后面的空間,例程中用做開機(jī)圖像傳送時(shí),后面的緩沖區(qū)還沒使用,所以侵占一下也沒什么。但如果后面的用上了。侵占就導(dǎo)致后面的數(shù)據(jù)錯(cuò)誤。這也是使用指針的優(yōu)點(diǎn)。
第三個(gè)數(shù)組是buffer3,安排了2560字節(jié),用來放10個(gè)8x16數(shù)字的顯示數(shù)據(jù),每個(gè)占256字節(jié)。使顯示速度達(dá)到最快。實(shí)際應(yīng)用中如果有需要頻繁刷屏的字符,可以采用這種模式處理。
Buffer3定義的是一個(gè)二維數(shù)組,寫入數(shù)據(jù)時(shí)只當(dāng)一維數(shù)組,按順序?qū),但讀出時(shí)按二維讀。編程方便許多。
例程中常規(guī)字模顯示函數(shù)用了buffer3做緩沖區(qū),這會(huì)影響專用字模顯示功能的使用,實(shí)際上常規(guī)字模顯示應(yīng)該使用buffer2,但技術(shù)原因有不方便之處,做為實(shí)驗(yàn)使用,就保留了這個(gè)失誤,這樣常規(guī)顯示和專用字模顯示只能保留一個(gè)了(因?yàn)樗鼈兊木彌_區(qū)設(shè)重復(fù)了)
在例程中有開啟高速高級(jí)SPI的語句(在mcu設(shè)置函數(shù)mcu_initial.c里)
CLKSEL &= ~0x80; //默認(rèn)選擇 PLL 的 96M 作為 PLL 的輸出時(shí)鐘
USBCLK |= 0x20; //PLL 輸入時(shí)鐘 2 分頻 ,因?yàn)閟tc-isp設(shè)定頻率為24M
USBCLK |= 0x80; //使能 PLL 倍頻
delay(222);//等待PLL鎖頻
CLKSEL &= ~0x40; //默認(rèn) HSPWM/HSSPI 選擇主時(shí)鐘為時(shí)鐘源
HSCLKDIV = 0; //HSPWM/HSSPI 時(shí)鐘源不分頻
可以屏蔽掉,看一下對(duì)比效果。
例程驗(yàn)證時(shí)使用的是STC32G12K128DIP40芯片,焊了一個(gè)小洞洞板。
FTF彩屏使用的是128x128分辨率。0.85吋,我手里大點(diǎn)的屏都是并口的。
調(diào)試中使用了STC-USB LINK1D硬件仿真器,個(gè)頭不大,但很給力。讓我這個(gè)第一次玩DMA的人能清楚地看到問題出在哪里,程序卡在哪里。對(duì)癥處理,節(jié)約了N多時(shí)間。
程序主要內(nèi)容和編程思路已經(jīng)說完了。完整的程序放在附件中可以下載查看。歡迎指導(dǎo),歡迎吐槽。
分享這個(gè)程序的目的是希望使用mcu芯片的朋友們能更好的使用DMA功能,更多地發(fā)揮出它的應(yīng)有效能。也為初學(xué)的朋友們提供一個(gè)實(shí)例借鑒。mcu技術(shù)的發(fā)展越來越復(fù)雜,例程對(duì)學(xué)習(xí)者的作用是不能低估的。

Q1.jpg (561.15 KB, 下載次數(shù): 143)

Q1.jpg

Q2.jpg (314.3 KB, 下載次數(shù): 149)

Q2.jpg

Q3.jpg (290.59 KB, 下載次數(shù): 122)

Q3.jpg

imagination.zip

289.36 KB, 下載次數(shù): 78, 下載積分: 黑幣 -5

附件內(nèi)為代碼

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:262 發(fā)表于 2023-2-6 12:34 | 只看該作者
你好樓主,,此代碼編譯出現(xiàn):Error: Project 'imagination' requires 'C251' Toolchain which is not installed.
回復(fù)

使用道具 舉報(bào)

板凳
ID:1039438 發(fā)表于 2023-2-6 13:23 | 只看該作者
heicad 發(fā)表于 2023-2-6 12:34
你好樓主,,此代碼編譯出現(xiàn):Error: Project 'imagination' requires 'C251' Toolchain which is not install ...

是不是你沒使用c251呀?
回復(fù)

使用道具 舉報(bào)

地板
ID:389094 發(fā)表于 2023-2-16 13:40 | 只看該作者
我就不明白,究竟是16位還是32位的,用C251的編譯器,按16位來編譯,怎么樣體現(xiàn)它是32位的,ACC和內(nèi)部總線是32位的嗎?還是讀一個(gè)32位的數(shù)要分2次讀??
回復(fù)

使用道具 舉報(bào)

5#
ID:1039438 發(fā)表于 2023-2-17 12:59 | 只看該作者
這個(gè)問題與本程序無關(guān)。是廠家應(yīng)該說明的,我看到他們說的是這款芯片是32位的8051,至于各種總線的位數(shù),在數(shù)據(jù)手冊(cè)里有具體說明,我記不太住,有興趣可以去看官方數(shù)據(jù)手冊(cè),大概記得有些功能是32位,有些24位,有些8位。畢竟一組IO是8位,8位用著方便,但也有些32位的功能支持。我感興趣的是價(jià)格與功能符合我的需要,就選擇了它。
回復(fù)

使用道具 舉報(bào)

6#
ID:339654 發(fā)表于 2023-3-21 19:09 | 只看該作者
heicad 發(fā)表于 2023-2-6 12:34
你好樓主,,此代碼編譯出現(xiàn):Error: Project 'imagination' requires 'C251' Toolchain which is not install ...

缺少251的編譯器
回復(fù)

使用道具 舉報(bào)

7#
ID:929517 發(fā)表于 2023-9-1 18:05 來自手機(jī) | 只看該作者
這個(gè)芯片需要下載keil的 c251 版本
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表