資源簡介
兩片8255實現車燈、油門、剎車、轉向、換擋功能,使用步進電機模擬輪子,數碼管顯示速度。

代碼片段和文件信息
/*?Main.c?file?generated?by?New?Project?wizard
?*
?*?Created:???周五?1月?6?2017
?*?Processor:?8086
?*?Compiler:??Digital?Mars?C
?*
?*?Before?starting?simulation?set?Internal?Memory?Size?
?*?in?the?8086?model?properties?to?0x10000
?*/
#define?base8255?8000H //設定值
#define?PA?base8255+00H*2 //PA口
#define?PB?base8255+01H*2 //PB口
#define?PC?base8255+02H*2 //PC口(本次未使用)
#define?COM8255?base8255+03H*2 //工作方式
#define?Bbase8255?9000H //設定值
#define?BPA?9000H //PA口
#define?BPB?9040H //PB口
#define?BPC?9080H //PC口(本次未使用)
#define?COMB8255?90C0H //工作方式
#define?ADC 0E002H
char?xiangxu[8]={02H06H04H0CH08H09H01H03H};??//相序表
void?outp(unsigned?int?addr?char?data)?{
??__asm?{
????mov?dx?addr
????mov?al?data
????out?dx?al
??}
}
//?Read?a?byte?from?the?specified?I/O?port
char?inp(unsigned?int?addr)?{
??char?result;
??
??__asm?{
????mov?dx?addr
????in?al?dx
????mov?result?al
??}
??
??return?result;
}
void?delay(){
???for(int?i=0;i<50;++i){
??????for(int?j=0;j<120;++j)
?;
???}
}
void?delayms(int?ms){
???for(int?i=0;i ??????for(int?j=0;j<122;++j){}
}
char?tmpjudge;
int?m_i=0t_i=0;
char?tmp1tmp2;
int?spd=0;
unsigned?int?speed=0;
unsigned?char?speed1=0speed2=0speedshow=0;
void?main(void)
?{
????//設置工作方式:10001010(特征位=1,A組0方式=00,PA輸出=0,PC上半輸入=1,B組0方式=0,PB輸入=1,PC下半輸出=0)
????outp(COM825508AH);
????//設置工作方式:10001000(特征位=1,A組0方式=00,PA輸出=0,PC上半輸出=1,B組0方式=0,PB輸出=0,PC下半輸出=0)
????outp(COMB8255088H);
????outp(PA0FFH);
????outp(PC0FFH);
????outp(PB00H);
???while?(1){
?????tmp=inp(PB);//車燈判斷,用到PB口低三位,輸出到PA口低四位
?????tmp=tmp&06H;
?????if(tmp==04H){
tmp=inp(PB);
tmp1=(tmp)&01H;
if(tmp1==00H)tmp=0b11111010;
if(tmp1==01H)tmp=0b11111011;
outp(PAtmp);
?????}
?????else?if(tmp==02H){
tmp=inp(PB);
tmp1=(tmp)&01H;
if(tmp1==00H)tmp=0b11111100;
if(tmp1==01H)tmp=0b11111101;
outp(PAtmp);
?????}
?????else?{
tmp=inp(PB);
tmp1=(tmp)&01H;
if(tmp1==00H)tmp=0b11111110;
if(tmp1==01H)tmp=0b11111111;
outp(PAtmp);
?????}
?????unsigned?char?tmp3=inp(PB);//速度判斷,用到PB口3~6位,輸出到PC口低四位
?????tmp3=tmp3&0b11111000;
?????switch(tmp3){
case?0b11110000:spd=-1;break;
case?0b11101000:spd=0;break;
case?0b11011000:spd=1;break;
case?0b10111000:spd=2;break;
case?0b01111000:spd=3;break;
?????}
?????if(spd!=-1?&&?spd!=0){
outp(PCxiangxu[m_i]);
if(m_i>0)--m_i;
else?m_i=7;
tmp=inp(PA);
tmp=tmp&0b11111111;
outp(PAtmp);
if(speed<22*spd)speed+=(spd+1);
else?speed-=(spd+1);
delayMS((4-spd)*35);
?????}
?????else?if(spd==-1){
outp(PCxiangxu[m_i]);
if(m_i<7)++m_i;
else?m_i=0;
tmp3=inp(PA);
tmp3=tmp3&0b11110111;
outp(PAtmp3);
if(speed>5)speed-=2;
else?speed=5;
delayMS(50);
?????}
?????else?if(spd==0){
if(speed>0)speed-=1;
delayMS(50);
?????}
?????tmp=inp(PA);//轉方向判斷,用到PC口高四位,輸出到PA口高四位
?????tmp1=tmp&(0FH);
?????tmp=inp(PC);
?????tmp2=tmp&(030H);
?????if(tmp2==20H){
if(t_i>0)--t_i;
else?t_i=7;
tmp3=(xiangxu[t_i])<<
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-01-07?00:23??CourseDesign?-?副本\
?????目錄???????????0??2017-01-06?22:39??CourseDesign?-?副本\8086\
?????目錄???????????0??2017-01-07?00:14??CourseDesign?-?副本\8086\Debug\
?????文件????????4664??2017-01-07?08:59??CourseDesign?-?副本\8086\Debug\Debug.exe
?????文件????????3361??2017-01-07?08:59??CourseDesign?-?副本\8086\Debug\main.obj
?????文件????????1341??2017-01-07?08:59??CourseDesign?-?副本\8086\Debug\Makefile
?????文件?????????190??2017-01-07?00:14??CourseDesign?-?副本\8086\Debug\rtl.obj
?????文件????????3840??2017-01-07?08:59??CourseDesign?-?副本\8086\main.c
?????文件?????????559??2017-01-06?16:25??CourseDesign?-?副本\8086\rtl.asm
?????文件???????30381??2017-01-07?00:13??CourseDesign?-?副本\Backup?Of?CourseDesign.pdsbak
?????文件???????30431??2017-01-07?00:23??CourseDesign?-?副本\CourseDesign.pdsprj
?????文件????????4812??2017-01-07?09:02??CourseDesign?-?副本\CourseDesign.pdsprj.ZALUS.Ben?Zalus.workspace
?????文件???????25453??2017-01-06?21:41??CourseDesign?-?副本\Last?Loaded?CourseDesign.pdsbak
評論
共有 條評論