導航:首頁 > 操作系統 > 松翰單片機程序

松翰單片機程序

發布時間:2023-07-24 06:44:36

❶ 小弟初識松翰單片機,現用sn8p2711,編寫了一個PWM調光的程序。

TC0C是定時器自身計數用的當然不能賦值,如果想調整占空比只有對TC0R賦值。規格書上寫得很清楚:
PWM 信號輸出到 PWM0OUT ( P5.4 引腳), TC0OUT 和 ALOAD0 標志位控制 PWM 輸出的階數( 256 、 64 、 32
和 16 )。 8 位計數器 TC0C 計數過程中不斷與 TC0R 相比較,當 TC0C 計數到兩者相等時, PWM 輸出低電平,當 TC0C
再次從零開始計數時, PWM 被強制輸出高電平。 PWM0 輸出占空比 = TC0R/ 計數量程 (計數量程 = 256 、 64 、 32 或 16 ) 。
參考寄存器保持輸入 00H 可使 PWM 的輸出長時間維持在低電平,通過修改 TC0R 可改變 PWM 輸出占空比。

❷ 松翰單片機,如何用匯編進行位定義

1、如果你是要定義一個位變數的話。一般,我們都先定義一個位元組:『XXX
DS
1』;這個條語句表示定義一個位元組,然後,們再定義想要的位變數。比如:『getdata_flag
equ
xxx.0』。這樣我們就定義了一個位變數,如果你還想定義一個位變數,那麼你可以再加一條語句:『getdata_flag
equ
xxx.1』。依此類推。你就可以定義8個位變數。要是你還覺得不夠用的話,你可以歸以上的做法,再定義一個位元組,然後再定義另外8個位變數。
2、如果你是想用一個位來代替I/O口的某一個位的話,你可以直接用:『YYY
EQU
P1.x』或『YYY
EQU
P2.x』就可以了。
3、如果你想用一個位代替寄存器的某一位的話,其做法和2當中是一樣的。例如:『zzz
EQU
GIE』。

❸ 松翰單片機SN8P2711A產生pwm程序,急

給個51單片機的給你參考下

*---------------
文件名稱: PWM.C
功能 :單片機脈沖方式產生PWM信號
----------------*/
#include <reg52.h> // 引用標准庫的頭文件
#include <absacc.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
#define COUNT0 XBYTE [0X0000] // 8254計數器0寄存器地址
#define COUNT1 XBYTE [0X0200] // 8254計數器1寄存器地址
#define COUNT2 XBYTE [0X0400] // 8254計數器2寄存器地址
#define COMWORD XBYTE [0X0600] // 8254控制寄存器地址

/********************************
函數名稱: SIGNAL(SIG_OUTPUT_COMPARE1A)
功能 :定時器0中斷子程序
入口參數:無
返回值 :無
********************************/
void time0_int () interrupt 1 using 1
{
TR0=0; // 關閉T0
TH0=-(20000/256);
TL0=-(20000%256); //重置20ms計數值
/*--------------用8254計數器發送第一路的PWM信號-----------*/
COMWORD=0x30; //1MHz時鍾作為計數時鍾,計數1000次後實現1ms高電平
COUNT0=0xE0;
COUNT1=0x03;
/*--------------用8254發送第二路的PWM信號----------------*/
COMWORD=0x70; //1MHz時鍾作為計數時鍾,計數2000次後實現2ms高電平
COUNT0=0xD0;
COUNT1=0x07;
/*-------------用8254發送第三路的PWM信號----------------*/
COMWORD=0xB0;//1MHz時鍾作為計數時鍾,計數3000次後實現32ms高電平
COUNT0=0xB0;
COUNT1=0x0B;
TR0=1; //啟動T0
}
//主函數
void main ()
{
EA=1; // 開CPU總中斷
ET0=1; // 開T0定時器中斷
TMOD=0x01; // 開定時器中斷
TH0=-(20000/256); //20ms定時器計數初值
TL0=-(20000%256);
/*--------------向8254控制寄存器選擇計數器0,並對其賦值0-----------------*/
COMWORD=0x30;
COUNT0=0; //賦低位位元組
COUNT0=0; //賦高位位元組
/*---------------向8254控制寄存器選擇計數器1,並對其賦值0------------------*/
COMWORD=0x70;
COUNT0=0; //賦低位位元組
COUNT0=0; //賦高位位元組
/*---------------向8254控制寄存器選擇計數器2,並對其賦值0-----------------*/
COMWORD=0xB0;
COUNT0=0; //賦低位位元組
COUNT0=0; //賦高位位元組
TR0=1; //啟動定時器0
While (1); //無限次循環
}

❹ 松翰單片機匯編實現控制一個LED燈閃爍SOS求救信號。

led_scan260:
upto led_count,26,led_scan90 ;;
bts0 f_led_change ;;
jmp $+4 ;;
bclr led_1 ;;
bset f_led_change ;;
jmp led_scan90 ;;
bset led_1 ;;
bclr f_led_change ;;
upto led_change,3,led_scan90 ;;
bclr f_led_260ms ;;
bset f_led_50ms ;;
ret
led_scan50:
upto led_count1,5,led_scan90 ;;
bts0 f_led_change1 ;;
jmp $+4 ;;
bclr led_1 ;;
bset f_led_change1 ;;
jmp led_scan90 ;;
bset led_1 ;;
bclr f_led_change1 ;;
upto led_change,16,led_scan90 ;;
; bclr f_led_260ms ;;
bclr f_led_50ms ;;
bset f_led_360ms ;;

這是一個亮260MS 閃爍後 50MS閃爍 ,的程序 ,和你的要求差不多 我也是剛學松翰單片機 ,希望多多交流 後面是360MS的閃爍程序

❺ 松翰單片機:SN8P2711A,SN8P2501B可以用C語言來寫程序嗎用什麼編譯

可以。
有專門的編譯器,在官網下載,www.sonix.com.cn。
最新的版本是SN8_C_Studio_V144。

❻ 松翰單片機C程序FOR循環調試出錯

不應該出現這種情況的,可能是你模擬時單步執行操作有誤或者其他問題(比如編譯器本身),你可以驗證一下延時時間長短來查看具體情況,比如a=10000時如果延時約10秒證明沒有什麼問題,如果如你所說可能延時就只有一二十毫秒的話就肯定有問題了。

閱讀全文

與松翰單片機程序相關的資料

熱點內容
數控車床如何進行自動編程 瀏覽:8
app網課視頻怎麼拷貝到電腦上 瀏覽:708
安卓國服光遇小王子季節什麼時候結束 瀏覽:537
恢復的音樂在哪個文件夾 瀏覽:595
qq傳輸文件夾壓縮包 瀏覽:911
sha1加密演算法java 瀏覽:232
單片機ds1302程序 瀏覽:738
杜比壓縮開還是關怎樣判斷 瀏覽:366
對象類型轉換java編譯和運行 瀏覽:284
行政命令是什麼 瀏覽:371
android調用系統郵件 瀏覽:33
測溫軟體app是如何實現的 瀏覽:585
江蘇伺服器機房按需定製雲主機 瀏覽:639
c程序員筆試 瀏覽:694
excel怎麼引用統一文件夾 瀏覽:249
怎麼把微信抖音加密 瀏覽:304
android滑動進度條 瀏覽:836
javagmt轉換 瀏覽:827
linux查看snmp 瀏覽:26
ug80車床編程 瀏覽:518