c語言asm
㈠ 怎麼用c語言寫可以調節的延時程序,請大俠幫忙
延時程序(包括asm和C程序,都是我在學單片機的過程中用到的),在單片機延時程序中應考慮所使用的晶振的頻率,在51系列的單片機中我們常用的是11.0592MHz和12.0000MHz的晶振,而在AVR單片機上常用的有8.000MHz和4.000MH的晶振所以在網上查找程序時如果涉及到精確延時則應該注意晶振的頻率是多大。
軟體延時:(asm)
晶振12MHZ,延時1秒
程序如下:
DELAY:MOV 72H,#100
LOOP3:MOV 71H,#100
LOOP1:MOV 70H,#47
LOOP0:DJNZ 70H,LOOP0
NOP
DJNZ 71H,LOOP1
MOV 70H,#46
LOOP2:DJNZ 70H,LOOP2
NOP
DJNZ 72H,LOOP3
MOV 70H,#48
LOOP4:DJNZ 70H,LOOP4
定時器延時:
晶振12MHZ,延時1s,定時器0工作方式為方式1
DELAY1:MOV R7,#0AH ;;晶振12MHZ,延時0.5秒
AJMP DELAY
DELAY2:MOV R7,#14H ;;晶振12MHZ,延時1秒
DELAY:CLR EX0
MOV TMOD,#01H ;設置定時器的工作方式為方式1
MOV TL0,#0B0H ;給定時器設置計數初始值
MOV TH0,#3CH
SETB TR0 ;開啟定時器
HERE:JBC TF0,NEXT1
SJMP HERE
NEXT1:MOV TL0,#0B0H
MOV TH0,#3CH
DJNZ R7,HERE
CLR TR0 ;定時器要軟體清零
SETB EX0
RET
C語言延時程序:
10ms延時子程序(12MHZ)
void delay10ms(void)
{
unsigned char i,j,k;
for(i=5;i>0;i--)
for(j=4;j>0;j--)
for(k=248;k>0;k--);
}
1s延時子程序(12MHZ)
void delay1s(void)
{
unsigned char h,i,j,k;
for(h=5;h>0;h--)
for(i=4;i>0;i--)
for(j=116;j>0;j--)
for(k=214;k>0;k--);
}
200ms延時子程序(12MHZ)
void delay200ms(void)
{
unsigned char i,j,k;
for(i=5;i>0;i--)
for(j=132;j>0;j--)
for(k=150;k>0;k--);
}
500ms延時子程序程序: (12MHZ)
void delay500ms(void)
{
unsigned char i,j,k;
for(i=15;i>0;i--)
for(j=202;j>0;j--)
for(k=81;k>0;k--);
}
下面是用了8.0000MHZ的晶振的幾個延時程序(用定時0的工作模式1):
(1)延時0.9MS
void delay_0_9ms(void)
{
TMOD=0x01; /*定時器0工作在模式1下(16位計數器)*/
TH0=0xfd;
TL0=0xa8;
TR0=1; /*啟動定時器*/
while(TF0==0);
TR0=0;
}
(2)延時1MS
void delay_1ms(void)
{
TMOD=0x01; /*定時器0工作在模式1下(16位計數器)*/
TH0=0xfd;
TL0=0x65;
TR0=1; /*啟動定時器*/
while(TF0==0);
TR0=0;
}
(3)延時4.5ms
void delay_4_5ms(void)
{
TMOD=0x01; /*定時器0工作在模式1下(16位計數器)*/
TH0=0xf4;
TL0=0x48;
TR0=1; /*啟動定時器*/
while(TF0==0);
TR0=0;
}
㈡ C語言內嵌匯編,__asm("")和__asm{}和__asm有啥區別
不同的編譯、開發環境下用法格式有差別。
__asm("") 引號內部是匯編指令。
__asm 可以跟匯編指令。
㈢ c語言中asm怎麼用使其在TC2.0中編譯通過。
Turbo C 2.0 中,可以用asm關鍵字實現在源程序中嵌入匯編語句。
在TC2中,使用asm關鍵字的格式為:
asm {
匯編程序語句塊
}
注意這個是在一個段以內的程序,就是總程序在64K以內
㈣ 怎樣理解c語言中for和asm中的冒號
在 C 語言中 for 沒有冒號,而是分號,如果寫成冒號,那就是語法錯誤了。其語法例如:
int i ;
for( i = 0 ; i < 50 ; i += 2 ) /* for 循環體,i=0 是初始條件,i<50 是終止條件,i+= 2 是每一次執行循環體後的步長為 2 */
printf("i = %d\n", i ) ;
至於說 asm 是代表在 C 語言中嵌入簡單代碼的匯編指令,在 C 語言中調用匯編語言指令。其後面以冒號結尾。
......
asm:
......
㈤ C語言關鍵字asm有什麼用途和在什麼地方使用麻煩大家了!首先表示感謝!
ASM(Assembly Language)是匯編語言源程序的擴展名,匯編程序員也稱匯編為ASM
當你要在程序中插入一段匯編語言代碼的時候,使用
_asm { (匯編代碼)} 注意前面有個下劃線。
當你要插入一句匯編語言代碼的時候,也可以這么寫如
_asm MOV AL, 2
㈥ C中如何使用.asm文件
asm文件是宏匯編文件,在c中調用方法如下:
1、編寫匯編程序:
#include <xc.inc>
GLOBAL _add ; 聲明全局可用的函數add
SIGNAT _add,4217 ; 告訴編譯器調用方式
;
PSECT mytext,local,class=CODE,delta=2
; our routine to add to ints and return the result
_add:
; W is loaded by the calling function;
BANKSEL (PORTB) ; select the bank of this object
ADDWF BANKMASK(PORTB),w ; add parameter to port
; the result is already in the required location (W)so we can ; just return immediately
RETURN
2、編寫c語言程序
//聲明調用外部的匯編程序
extern unsigned char add(unsigned char a);
void main(void) {
volatile unsigned char result;
result = add(5); // 開始調用上面聲明的匯編函數
}
㈦ C語言中的asm怎麼用
_asm mov ax,0;
_asm{
mov ax,0
mov bx,0
}
兩種寫法都行,VC++6.0編譯通過