真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C語(yǔ)言編寫單片機(jī)中斷函數(shù),單片機(jī)中斷函數(shù)怎么寫

單片機(jī)用C語(yǔ)言編寫中斷的范例?

定時(shí)器溢出中斷:

象州網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)公司成立與2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。

#includereg51.h

void timer0(void); //函數(shù)聲明

void main()

{

P1^1 = 0;

TMOD = 0x01; //定時(shí)模式

THO = 0xEE;

TL0 = 0xFF; //定時(shí)時(shí)間

ET0 = 1; //中斷允許

EA = 1; //總中斷使能

TR0 = 1; //開始計(jì)時(shí)

while(1); //等待中斷

}

void timer0(void) interrupt 1 using 0 //定時(shí)器0溢出中斷

{

TR0 = 0; //停止計(jì)時(shí)

P1^1 = ~P1^1; //取反輸出

THO = 0xEE;

TL0 = 0xFF; //重載定時(shí)時(shí)間

TR0 = 1; //開始計(jì)時(shí)

}

外部中斷:

#includereg51.h

void it0(void)

void main()

{

P^1.1 = 0;

IT0 = 0; //觸發(fā)方式

EX0 =1; //中斷允許

EA = 1; //中斷使能

while(1); //等待中斷

}

void it0(void) interrupt 0 using 1 //外部中斷0中斷處理程序

{

P1^1 = ~P1^1; //取反輸出

}

串口中斷:

#includereg51.h

void suart(void);

void main()

{

P1 = 0xAA;

TMOD = 0x20; //設(shè)置定時(shí)器1為自動(dòng)重載模式,作為波特率發(fā)生器

TH1 = 0xXX; //由波特率計(jì)算出來(lái)的定時(shí)值

TL1 = 0xXX; //

SCON = 0x50; //串口模式

ES = 1; //開放串口中斷

EA = 1; //總中斷使能

TR1 = 1; //

while(1) //等待中斷

{

if(XXXX)

{

SBUF = 0xAA; //發(fā)送

}

}

}

void suart(void) interrupt 4 using 0

{

if(RI) //接受完臂

{

XXXXX;

}

if(TI) //發(fā)送完畢

{

XXXXX;

}

}

中斷矢量程序入口: void 函數(shù)名(形參) interrupt 中斷矢量 [using 寄存器]

單片機(jī)C語(yǔ)言中斷函數(shù)的定義形式是怎樣的?

形式如下:

void 中斷名(void) inerrupt 中斷號(hào) using 工作寄存器組

比如外部中斷0

void ext0(void) interrupt 0 using 1 //后面的using 1可以省略,缺省為0

定時(shí)器1

void t1isr() interrupt 3

擴(kuò)展資料:

單片機(jī)內(nèi)部結(jié)構(gòu)

1、CPU

它的名字沒(méi)有改,還是稱為CPU(Central Processing Unit)。它是單片機(jī)的核心部件,包括運(yùn)算器和控制器。

運(yùn)算器既是算術(shù)邏輯單元ALU(Arithmetic logic Unit),其功能是進(jìn)行算術(shù)運(yùn)算和邏輯運(yùn)算。

控制器一般由指令寄存器、指令譯碼器、時(shí)序電路和控制電路組成。其作用是完成取指令、將指令譯碼形成各種微操作并執(zhí)行指令,同時(shí)控制計(jì)算機(jī)的各個(gè)部件有條不紊地工作。

2、單片機(jī)內(nèi)部結(jié)構(gòu)之一ROM

“硬盤”,改了名字,稱為程序存儲(chǔ)器,也叫只讀存儲(chǔ)器。用ROM(Read only memery)表示。其作用和計(jì)算機(jī)的硬盤差不多,用來(lái)存放用戶編寫的程序。特點(diǎn)是:掉電后不會(huì)丟失數(shù)據(jù)(程序)。

c語(yǔ)言怎么編寫單片機(jī)的中斷

給你上個(gè)較完整的程序,可以直接在KEIL中運(yùn)行并觀察輸出

/******************************************************************************

功能:

本程序在12M晶振模式下,通過(guò)定時(shí)器中斷精確實(shí)現(xiàn)數(shù)字時(shí)鐘計(jì)時(shí)操作,并在KEIL

中實(shí)現(xiàn)輸出。時(shí)、分、秒的變化在定時(shí)中斷里處理。

說(shuō)明:

因采用工作方式2,自動(dòng)裝入初值,所以此程序計(jì)時(shí)很精確,只是在KEIL中模擬輸

出顯示的變化速度很快,這點(diǎn)可不理會(huì)

******************************************************************************/

#include

#include

#define

TEST

//此行用于KEIL輸出顯示,如果不需要顯示可將其刪除

typedef

unsigned

char

uchar;

typedef

unsigned

int

uint;

#define

TH0TL0_INIT

(256-250)

//定時(shí)器8位自動(dòng)裝入模式下寄存器初值,0.25ms中斷一次

char

cHour;

//時(shí)

char

cMin;

//分

char

cSec;

//秒

uint

iCount;

//秒計(jì)數(shù),計(jì)數(shù)達(dá)到4000時(shí)1s,4000*0.25ms

=1000ms

=

1s

bit

bSecChanged;

//秒發(fā)生變化標(biāo)志,每秒送一次輸出顯示,送顯完成后清0,提高主程序效率

//==============================================================================

//T0定時(shí)器中斷服務(wù)程序,12M晶振下每0.25ms產(chǎn)生中斷,本程序執(zhí)行一次

//==============================================================================

void

Timer0()

interrupt

1

{

iCount++;

//秒計(jì)數(shù)值+1

if(iCount==4000)

{//時(shí)間計(jì)數(shù)達(dá)到1S

iCount

=

0;

//重新開始下一秒計(jì)數(shù)

cSec++;

//時(shí)鐘:秒+1

bSecChanged

=

1;

//置秒發(fā)生變化標(biāo)志

if(cSec==60)

{//計(jì)夠60s

cSec

=

0;

//重新開始下一分計(jì)數(shù)

cMin++;

//時(shí)鐘:分+1

}

if(cMin==60)

{//計(jì)夠60分鐘

cMin

=

0;

//重新開始下一小時(shí)計(jì)數(shù)

cHour++;

//時(shí)鐘:小時(shí)+1

}

if(cHour==24)

{//計(jì)夠24小時(shí)

cHour

=

0;

//重新開始第二天計(jì)數(shù)

}

}

}

//==============================================================================

//主程序

//==============================================================================

void

main()

{

uchar

outstr[10];

//輸出字符串,我的編譯器可能有問(wèn)題,直接輸出有錯(cuò)

TMOD

=

0X02;//工作方式2,8位自動(dòng)重裝計(jì)時(shí)模式

TH0

=

TH0TL0_INIT;

//0.25ms中斷一次

TL0

=

TH0TL0_INIT;

//0.25ms中斷一次

#ifdef

TEST

SCON

=

0x50;

/*

SCON:

mode

1,

8-bit

UART,

enable

rcvr

*/

TMOD

|=

0x20;

/*

TMOD:

timer

1,

mode

2,

8-bit

reload

*/

TH1

=

221;

/*

TH1:

reload

value

for

1200

baud

@

16MHz

*/

TR1

=

1;

/*

TR1:

timer

1

run

*/

TI

=

1;

/*

TI:

set

TI

to

send

first

char

of

UART

*/

#endif

cHour

=

0;

//時(shí)

cMin

=

0;

//分

cSec

=

0;

//秒

iCount

=

0;

//秒計(jì)數(shù)

bSecChanged

=

0;

outstr[2]

=

':';

//時(shí)分分隔符

outstr[5]

=

':';

//分秒分隔符

outstr[8]

=

0;

//字符串結(jié)束符

EA=1;

//開總中斷

ET0=1;

//允許T0中斷

TR0=1;

//啟動(dòng)T0

while(1)

{

if(bSecChanged==1)

{//秒發(fā)生變化,將時(shí)間值轉(zhuǎn)換為可顯示字符串準(zhǔn)備送顯示

bSecChanged

=

0;//清除標(biāo)志,節(jié)省CPU資源

outstr[0]

=

cHour/10

+

0x30;

//將秒轉(zhuǎn)換為ASCII碼

outstr[1]

=

cHour%10

+

0x30;

outstr[3]

=

cMin/10

+

0x30;

//將分轉(zhuǎn)換為ASCII碼

outstr[4]

=

cMin%10

+

0x30;

outstr[6]

=

cSec/10

+

0x30;

//將小時(shí)轉(zhuǎn)換為ASCII碼

outstr[7]

=

cSec%10

+

0x30;

#ifdef

TEST

printf("

%s\r",outstr);

//在KEIL中顯示時(shí)鐘

#endif

}

}

}


網(wǎng)站標(biāo)題:C語(yǔ)言編寫單片機(jī)中斷函數(shù),單片機(jī)中斷函數(shù)怎么寫
URL分享:http://weahome.cn/article/dssiicc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部