?? drive8155.c
字號:
/*----------------------------------------------------------------------------------------------------------------
庫文件名稱:driver8155.h
功能描述:驅(qū)動8155,透明操作8155,讀寫存儲器,讀寫PA、PB、PC,設(shè)置計數(shù)模式,讀計數(shù)值,開中斷,輸出中斷。
全局變量: state_flags是8155命令/狀態(tài)寄存器再RAM中的映射,不允許其它程序改動
特殊說明: 無
//----------------------------------------------------------------------------------------------------------------*/
#include<config.h>
void main(void)
{
unsigned char aa;
wr_mem(0x05,0x45);
aa=rd_mem(0x05);
}
unsigned char rd_mem(unsigned char mem_ad) /*讀存儲器*/
{
unsigned char mem_data;
unsigned int AD_mem;
AD_mem=&mem_head;
AD_mem=AD_mem+mem_ad;
mem_data=XBYTE[AD_mem];
return(mem_data);
}
void wr_mem(unsigned char mem_ad, unsigned char mem_data) /*寫存儲器*/
{
unsigned int AD_mem;
AD_mem=&mem_head;
AD_mem=AD_mem+mem_ad;
XBYTE[AD_mem]=mem_data;
}
char rd_PA(void) /*讀PA口*/
{ unsigned char PA_data;
ACC=state_flags; /*把狀態(tài)標(biāo)志字讀到ACC便于進行位操作*/
do
{
IO_flagA=0; /*置PA狀態(tài)標(biāo)志位為低--輸入*/
state_flags=ACC;
a8155_CON=state_flags; /*重寫控制字,完成對8155的設(shè)置*/
}
while(IO_flagA==1); /*判斷狀態(tài)標(biāo)志位是否為高*/
/*控制字設(shè)置完成*/
PA_data=a8155_PA; /*把PA口的數(shù)據(jù)讀到PA_data*/
return(PA_data); /*返回PA_data*/
}
char rd_PB(void) /*讀PB口*/
{ unsigned char PB_data;
ACC=state_flags; /*把狀態(tài)標(biāo)志字讀到ACC便于進行位操作*/
do
{
IO_flagB=0; /*置PB狀態(tài)標(biāo)志位為低--輸入*/
state_flags=ACC;
a8155_CON=state_flags; /*重寫控制字,完成對8155的設(shè)置*/
}
while(IO_flagB==1); /*判斷狀態(tài)標(biāo)志位是否為高*/
/*控制字設(shè)置完成*/
PB_data=a8155_PB; /*把PB口的數(shù)據(jù)讀到PB_data*/
return(PB_data); /*返回PB_data*/
}
char rd_PC(void) /*讀PC口*/
{ unsigned char PC_data;
ACC=state_flags; /*把狀態(tài)標(biāo)志字讀到ACC便于進行位操作*/
do
{
IO_flagC=0; /*置PB狀態(tài)標(biāo)志位為低--輸入*/
IO_flagC1=0; /*置控制字D3=0*/
state_flags=ACC;
a8155_CON=state_flags; /*重寫控制字,完成對8155的設(shè)置*/
}
while(IO_flagC==1); /*判斷狀態(tài)標(biāo)志位是否為高*/
/*控制字設(shè)置完成*/
PC_data=a8155_PC; /*把PB口的數(shù)據(jù)讀到PB_data*/
return(PC_data); /*返回PB_data*/
}
void wt_PA(unsigned char PA_data) /*寫PA口*/
{
ACC=state_flags; /*把狀態(tài)標(biāo)志字讀到ACC便于進行位操作*/
{IO_flagA=1; /*置PA狀態(tài)標(biāo)志位為高--輸出*/
state_flags=ACC; /*位操作完成,把ACC的內(nèi)容寫回狀態(tài)標(biāo)志字*/
a8155_CON=state_flags; /*寫控制字,完成對8155的設(shè)置*/
}
while(IO_flagA==0); /*判斷狀態(tài)標(biāo)志位是否為低
為低,設(shè)置未完成,需從新設(shè)置*/
a8155_PA=PA_data; /*將PA_data的內(nèi)容送到PA口*/
}
void wt_PB(unsigned char PB_data) /*寫PB口*/
{
ACC=state_flags; /*把狀態(tài)標(biāo)志字讀到ACC便于進行位操作*/
{IO_flagB=1; /*置PB狀態(tài)標(biāo)志位為高--輸出*/
state_flags=ACC; /*位操作完成,把ACC的內(nèi)容寫回狀態(tài)標(biāo)志字*/
a8155_CON=state_flags; /*寫控制字,完成對8155的設(shè)置*/
}
while(IO_flagB==0); /*判斷狀態(tài)標(biāo)志位是否為低
為低,設(shè)置未完成,需從新設(shè)置*/
a8155_PB=PB_data; /*將PB_data的內(nèi)容送到PB口*/
}
void wt_PC(unsigned char PC_data) /*寫PC口*/
{
ACC=state_flags; /*把狀態(tài)標(biāo)志字讀到ACC便于進行位操作*/
{IO_flagC=1; /*置PC狀態(tài)標(biāo)志位為高--輸出*/
IO_flagC1=0; /*置控制字D3=0*/
state_flags=ACC; /*位操作完成,把ACC的內(nèi)容寫回狀態(tài)標(biāo)志字*/
a8155_CON=state_flags; /*寫控制字,完成對8155的設(shè)置*/
}
while(IO_flagC==0); /*判斷狀態(tài)標(biāo)志位是否為低
為低,設(shè)置未完成,需從新設(shè)置*/
a8155_PC=PC_data; /*將PC_data的內(nèi)容送到PC口*/
}
void Dint_PA(void) /*關(guān)A口中斷*/
{
ACC=state_flags; /*把狀態(tài)標(biāo)志字讀到ACC便于進行位操作*/
Int_flagA=0;
state_flags=ACC; /*位操作完成,把ACC的內(nèi)容寫回狀態(tài)標(biāo)志字*/
a8155_CON=state_flags; /*寫控制字,完成對8155的設(shè)置*/
}
void Eint_PA(void) /*開A口中斷*/
{
ACC=state_flags; /*把狀態(tài)標(biāo)志字讀到ACC便于進行位操作*/
Int_flagA=1;
state_flags=ACC; /*位操作完成,把ACC的內(nèi)容寫回狀態(tài)標(biāo)志字*/
a8155_CON=state_flags; /*寫控制字,完成對8155的設(shè)置*/
}
void Dint_PB(void) /*關(guān)B口中斷*/
{
ACC=state_flags; /*把狀態(tài)標(biāo)志字讀到ACC便于進行位操作*/
Int_flagB=0;
state_flags=ACC; /*位操作完成,把ACC的內(nèi)容寫回狀態(tài)標(biāo)志字*/
a8155_CON=state_flags; /*寫控制字,完成對8155的設(shè)置*/
}
void Eint_PB(void) /*開B口中斷*/
{
ACC=state_flags; /*把狀態(tài)標(biāo)志字讀到ACC便于進行位操作*/
Int_flagA=1;
state_flags=ACC; /*位操作完成,把ACC的內(nèi)容寫回狀態(tài)標(biāo)志字*/
a8155_CON=state_flags; /*寫控制字,完成對8155的設(shè)置*/
}
void PC0_PAint(void) /*PC上半口為PA狀態(tài)輸出*/
{ /*PC0=INTRa,PC1=BFa,PC3=/STBaP*/
ACC=state_flags; /*把狀態(tài)標(biāo)志字讀到ACC便于進行位操作*/
Int_flagA=1;
IO_flagC1=1;
state_flags=ACC; /*位操作完成,把ACC的內(nèi)容寫回狀態(tài)標(biāo)志字*/
a8155_CON=state_flags; /*寫控制字,完成對8155的設(shè)置*/
}
void PC4_PBint(void) /*PC上半口為PA狀態(tài)輸出*/
{ /*PC4=INTRb,PC5=BFb,PC6=/STBb*/
ACC=state_flags; /*把狀態(tài)標(biāo)志字讀到ACC便于進行位操作*/
Int_flagA=1;
IO_flagC1=1;
IO_flagC=1;
state_flags=ACC; /*位操作完成,把ACC的內(nèi)容寫回狀態(tài)標(biāo)志字*/
a8155_CON=state_flags; /*寫控制字,完成對8155的設(shè)置*/
}
void start_timer(void) /*開始計數(shù)器計數(shù)*/
{
ACC=state_flags; /*把狀態(tài)標(biāo)志字讀到ACC便于進行位操作*/
Timer_flag1=1;
Timer_flag2=1;
state_flags=ACC; /*位操作完成,把ACC的內(nèi)容寫回狀態(tài)標(biāo)志字*/
a8155_CON=state_flags; /*寫控制字,完成對8155的設(shè)置*/
}
void stop_timer(void) /*停止計數(shù)器計數(shù)*/
{
ACC=state_flags; /*把狀態(tài)標(biāo)志字讀到ACC便于進行位操作*/
Timer_flag1=1;
Timer_flag2=0;
state_flags=ACC; /*位操作完成,把ACC的內(nèi)容寫回狀態(tài)標(biāo)志字*/
a8155_CON=state_flags; /*寫控制字,完成對8155的設(shè)置*/
}
void setting_zero_stop(void) /*設(shè)定計數(shù)到零停止計數(shù)*/
{
ACC=state_flags; /*把狀態(tài)標(biāo)志字讀到ACC便于進行位操作*/
Timer_flag1=0;
Timer_flag2=1;
state_flags=ACC; /*位操作完成,把ACC的內(nèi)容寫回狀態(tài)標(biāo)志字*/
a8155_CON=state_flags; /*寫控制字,完成對8155的設(shè)置*/
}
int rd_timer(void) /*讀計數(shù)值*/
{
int time;
char timea;
time=Timer_B;
timea=Timer_A;
time=time<<8;
time=((time&timea)&0x3F);
return(time);
}
void setting_timerout_mode(unsigned char mode) /*設(shè)定TIMERout輸出模式*/
{
Timer_B=(mode&0x03);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -