導航:首頁 > 編程語言 > 8255c編程怎麼設置

8255c編程怎麼設置

發布時間:2022-06-29 00:36:57

『壹』 編程將8255設成基本輸入輸出形式,其中A口為輸入,B,C口高四位為輸出,C口低四位為輸入,工作字為91H。

是開學補考的題目嗎?

『貳』 可編程並行介面8255中C口的按位操作是如何實現的

1、首先用串口模塊將一個從PC機發來的串列數據轉換成並行數據存放到數據輸出選擇模塊的DOUT口,至於這個八位數據是輸入到控制寄存器還是從PA/PB/PC口輸出,就由另一個輸入輸出邏輯判斷模塊來控制。

2、邏輯判斷模塊根據A0-A1,WR,RD,還有控制字來判斷三個埠處於什麼工作方式,並將數據發送(接收)至A口、B口、C口的緩沖區。

3、通過PA輸出模塊、PA輸入模塊、PB輸出模塊、PB輸入模塊、PC輸出模塊將緩存區中的數據根據不同的工作方式進行輸入輸出。

8個模塊的作用:

1、串口通信模塊(Rs232RefComp):由於8255埠眾多,而fpga板載I/O口不夠用,所以採用串口輸入的方式來給8255提供所需的數據(D0-D7)。

2、數據輸出選擇模塊(dout_mux):8255A有3個8位數據埠,即埠A、埠B和埠C,通過數據輸出選擇模塊來最終判斷選擇哪個埠輸出。

3、數據輸入輸出邏輯判斷模塊(cntl_log):8255A的三個埠,還有一個控制寄存器,通過數據輸出輸入邏輯判斷模塊來判斷8255處於何種工作方式。

4、PA口輸出模塊(portaout):用來控制PA的緩存區的八位數據輸出到PA口。

5、PA口輸入模塊(portain):用來控制PA口讀到的數據放到PA的緩存區。

6、PB口輸出模塊(portbout):用來控制PB的緩存區的八位數據輸出到PB口。

7、PB口輸入模塊(portbin):用來控制PB口讀到的數據放到PB的緩存區。

8、PC口輸出模塊(portcout):用來控制PC口的位輸出。

『叄』 8255初始化C語言

參考答案 給我一個支點,我把鄰居那小子的汽車翹到溝里去,省得他見我就按喇叭。

『肆』 8255的C語言編程

P0口不像P1P2P3那樣內部有上拉電阻。若要輸出高電平要接上拉電阻。
單片機不要直接連8255,P0通過一個地址鎖存器(74LS373)連8255.要用p0口先發控制字,連在8255的A0A1和CS上。
A1A0若為01、10、11,分別選中8255的B口C口和控制口。若通過鎖存器連在)P0.1和P0.0,地址用16為表示,沒用到的埠設為1,則FF7CH、FF7DH、FF7EH、FF7FH分別是8255的ABC及控制口的地址。具體看你的硬體電路了。所以沒有固定的。
先給控制口發工作方式,如90H代表工作方式0。然後再與需要用到的口傳輸數據。不知道有沒有說清楚。
你找一本單片機書好好看看,匯編並不難,看明白匯編,單片機就理解差不多了。

『伍』 求8255的C語言編程舉例(希望有圖有程序)

/*本實驗通過P0口的分時復用,用8255擴展IO口,用74hc53鎖存低8位地址
8255的wr和rd直接與單片機的wr、rd連接,當做外部存儲器來使用,8255
的PA口上接LCD1602的數據埠,本程序的功能是在LCD上顯示字元串和自
定義的圖形,已成功實現(板子是自己焊的) */
/*********************包含頭文件*********************************/
#include <REGX51.H>
#include<absacc.h>
#define CLEARSCREEN LCD_write_command(0x01)
#define uint unsigned int
#define uchar unsigned char
/**************定義介面************************/
#define LCDIO P0
#define PA XBYTE[0xFF00]
#define PB XBYTE[0xFF01]
#define PC XBYTE[0xFF02]
#define COM XBYTE[0xFF03]
sbit LCD1602_RS=P1^0;
sbit LCD1602_RW=P1^1;
sbit LCD1602_EN=P1^2;
unsigned char table1[]={ 0x03,0x07,0x0f,0x1f,0x1f,0x1f,0x1f,0x1f,
0x18,0x1E,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,
0x07,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,
0x10,0x18,0x1c,0x1E,0x1E,0x1E,0x1E,0x1E,
0x0f,0x07,0x03,0x01,0x00,0x00,0x00,0x00,
0x1f,0x1f,0x1f,0x1f,0x1f,0x0f,0x07,0x01,
0x1f,0x1f,0x1f,0x1f,0x1f,0x1c,0x18,0x00,
0x1c,0x18,0x10,0x00,0x00,0x00,0x00,0x00}; //心圖案
/**************定義函數************************/
void LCD_write_command(unsigned char command); //寫入指令函數
void LCD_write_dat(unsigned char dat); //寫入數據函數
void LCD_set_xy( unsigned char x, unsigned char y ); //設置顯示位置函數
void LCD_dsp_char( unsigned x,unsigned char y,unsigned char dat); //顯示一個字元函數
void LCD_dsp_string(unsigned char X,unsigned char Y,unsigned char *s); //顯示字元串函數
void LCD_init(void); //初始化函數
void delay_nms(unsigned int n); //延時函數
void delay();
void init_8255();
void write_8255PA(uchar ch);
/**************8255初始化******************************/
void init_8255()
{
COM=0x80;
}
/*************往PA口寫數據*******************************/
void write_8255PA(uchar ch)
{
PA=ch;
}
/************初始化函數****************/
void LCD_init(void)
{
CLEARSCREEN; //clear screen
LCD_write_command(0x38); //set 8 bit data transmission mode
LCD_write_command(0x0d); //open display (enable lcd display)
LCD_write_command(0x80); //set lcd first display address
CLEARSCREEN; //clear screen
}

/**************寫指令函數********************************/
void LCD_write_command(unsigned char command)
{
write_8255PA(command);
delay_nms(100);
LCD1602_RS=0;
LCD1602_RW=0;
LCD1602_EN=0;
LCD1602_EN=1;
delay_nms(10);
}
/***************************************************/
/****************寫數據函數************************/
void LCD_write_dat(unsigned char dat)
{
write_8255PA(dat);
delay_nms(100);
LCD1602_RS=1;
LCD1602_RW=0;
LCD1602_EN=0;
delay_nms(1);
LCD1602_EN=1;
}
/****************************************************/
/***************設置顯示位置**************************/
void LCD_set_xy( unsigned char x, unsigned char y )
{
unsigned char address;
if (y == 1)
address = 0x80 + x;
else
address =0xc0+ x;
LCD_write_command(address);
}
/***************************************************/
/****************顯示一個字元**********************/
void LCD_dsp_char( unsigned x,unsigned char y,unsigned char dat)
{
LCD_set_xy( x, y );
LCD_write_dat(dat);
}
/**********************************************/
/***************顯示字元串函數***************/
void LCD_dsp_string(unsigned char X,unsigned char Y,unsigned char *s)
{
LCD_set_xy( X, Y );
while (*s)
{
LCD_write_dat(*s);
s ++;
}
}
/***********************************************/
/********** 延時**********************/
void delay_nms(unsigned int n)
{
unsigned int i=0,j=0;
for (i=n;i>0;i--)
for (j=0;j<10;j++);
}
/**************************************/
void delay()
{ int i;
for(i=0;i<50;i++)
delay_nms(100);}
/***********主函數**************/
void main(void)
{
unsigned char i,j,k,tmp;
init_8255();
LCD_init();
delay_nms(100);
tmp=0x40;//設置CGRAM地址的格式字
k=0;
for(j=0;j<8;j++)
{
for(i=0;i<8;i++)
{
LCD_write_command(tmp+i); // 設置自定義字元的 CGRAM 地址
delay_nms(2);
LCD_write_dat(table1[k]); // 向CGRAM寫入自定義字元表的數據
k++;
delay_nms(2);
}
tmp=tmp+8;
}
LCD_dsp_string(1,1,"LCD TEST ");//在第一行第一列顯示"LCD TEST"
LCD_dsp_string(1,2,"SUCCESSFUL ");//在第二行第一列顯示"SUCCESSFUL"
for (i=0;i<4;i++)
{
LCD_dsp_char( 12+i,1,i);//在第一行第12列位置顯示心圖案的上半部
delay_nms(1);
}
for (i=4;i<8;i++)
{
LCD_dsp_char(12+i-4,2,i);//在第二行第12列位置顯示心圖案的下半部
delay_nms(1);
}
do
{
LCD_write_command(0x08);
delay();
LCD_write_command(0x0c);
delay();
}while (1);
}

『陸』 C語言編程.8255流水燈設計這是8燈循環的編程。怎麼修改才能有不同的閃爍呢請各位大俠幫幫忙。謝謝了。

出高電平要接上拉電阻。
單片機不要直接連8255,P0通過一個地址鎖存器(74LS373)連8255.要用p0口先發控制字,連在8255的A0A1和CS上。
A1A0若為01、10、11,分別選中8255的B口C口和控制口。若通過鎖存器連在)P0.1和P0.0,地址用16為表示,沒用到的埠設為1,則FF7CH、FF7DH、FF7EH、FF7FH分別是8255的ABC及控制口的地址。具體看你的硬體電路了。所以沒有固定的。
先給控制口發工作方式,如90H代表工作方式0。然後再與需要用到的口傳輸數據。不知道有沒有說清楚。
你找一本單片機書好好看看,匯編並不難,看明白匯編,單片機就理解差不多了。

『柒』 關於8255A的C語言編程的問題

當然不行了,控制寄存器是同一個嘛
你只能在工作模式切換前進行置位和復位操作

『捌』 8255 PA口C語言編程問題

這是不可以的,8255的PA口是外設的口,而且沒有位定址。你想只對其中一個改變的話,只能先整組讀出來,再改變後寫回去。可以用個或語句來寫1.
PA|=0x02; //只改變PA1口

『玖』 微機原理8255編程

;;8255硬體連接及軟體設置:
;;B口方式0輸入,PB0~PB3分別連接K1~K4;
;;A口方式0輸出,PA0~PA3外接驅動電路控制燈的4種動作;
;;驅動電路,可由74LS06、ULN2003作反相電流放大驅動繼電器或固體繼電器組成;
;;C口閑置;
;;按以上設置,8255方式控制字是82H ;
;;在PC機作主機的系統中,8255的4個寄存器地址是:
;;A口60H,B口61H,方式控制寄存器63H。

;;匯編程序如下:

SSEG SEGMENT PARA STACK ;堆棧段定義
DW 30H DUP(?)
SSEG ENDS

CSEG SEGMENT ;代碼段定義
ASSUME CS:CSEG,DS:CSEG

ORG 200h ;主程序首址
START: MOV AL, 82H ;方式控制字
MOV DX, 63H
OUT DX, AL ;方式控制字送入方式控制寄存器
Scan: IN AL,61H ;掃描從B口讀入的K1~K4狀態
CALL PRC1 ;開燈、關燈
CALL PRC2 ;是否暫停
CALL PRC3 ;是否換向
CALL PRC3 ;是否移動
JMP Scan ;主程序循環

PRC1 PROC NEAR ;"開/關燈"操作 子程序定義
PUSH AX ;B口狀態進棧暫存
TEST AL,00000001B ;檢測PB0輸入狀態
JZ CloseL ;若PB0低電平,表示K1斷,轉CloseL處執行
OpenL: OUT 60H,AL ;若PB0高電平,表示K1通,PA0輸出高電平,開燈
JMP RT1 ;轉RT1處指令返回
CloseL: MOV AL,00000000B ;PA0輸出低電平
OUT 60H,AL ;關燈
RT1: POP AX ;B口狀態出棧
RET ;返回主程序
PRC1 ENDP ;子程序定義完畢

PRC2 PROC NEAR ;"暫停"操作 子程序定義
PUSH AX ;B口狀態進棧暫存
TEST AL,00000010B ;檢測PB1輸入狀態
JZ RT2 ;若PB1低電平,表示K2斷,不暫停
PAUS: OUT 60H,AL ;若PB1高電平,表示K2通,PA1輸出高電平,暫停
RT2: POP AX ;B口狀態出棧
RET ;返回主程序
PRC2 ENDP ;子程序定義完畢

PRC3 PROC NEAR ;"換向"操作 子程序定義
PUSH AX ;B口狀態進棧暫存
TEST AL,00000100B ;檢測PB2輸入狀態
JZ RT3 ;若PB2低電平,表示K3斷,不換向
CHG: MOV AL,00000101B ;若PB2高電平,表示K3通
OUT 60H,AL ;PA2、PA0輸出高電平、換向,燈保持亮
RT3: POP AX ;B口狀態出棧
RET ;返回主程序
PRC3 ENDP ;子程序定義完畢

PRC4 PROC NEAR ;"移動"操作 子程序定義
TEST AL,00001000B ;檢測PB3輸入狀態
JZ RT4 ;若PB3低電平,表示K4斷,不移動
MOVE: MOV AL,00001001B ;若PB3高電平,表示K4通
OUT 60H,AL ;PA3、PA0輸出高電平、移動,燈保持亮
RT4: RET ;返回主程序
PRC4 ENDP ;子程序定義完畢

CSEG ENDS ;代碼段定義完畢
END START ;主程序結束

『拾』 跪求,8255控制數碼管,單片機c語言程序;

8255 管腳圖的鏈接:
http://ke..com/image/58af236d558d92ce43169488

下面是8255 管腳設置,具體代碼要看原理圖中各管腳的連接情況。
reset = 0; 禁止復位
cs = 0;wr = 0;//允許CPU將數據或控制字寫入8255

//
A1=1.A0=1;選擇.控制寄存器

//假設00001111控制D口的數據,從A口輸出;11110000控制D口的數據,從B口輸出;實際情況由實際管腳連接決定。
d0 = d1=d2= d3=0;
d4 = d5=d6=d7 = 1;

A1=0;A0=0;選擇PA口

//pa口--數碼管的段選
//根據原理圖設置pa口各引腳,假設使pa輸出00000001控制第1個數碼管
pa0 = pa1=pa2=pa3=pa4=pa5=pa6= 0;
pa7 = 1;

A1=0;A0=1;選擇PB口

//PB口--數碼管的位選
//根據原理圖設置pb口各引腳,假設使pb輸出00000001控制數碼管顯示0
pa0 = pa1=pa2=pa3=pa4=pa5=pa6= 0;
pa7 = 1;

//=========
A1=1.A0=1;選擇.控制寄存器

//假設00001111控制D口的數據,從A口輸出;11110000控制D口的數據,從B口輸出;實際情況由實際管腳連接決定。
d0 = d1=d2= d3=1;
d4 = d5=d6=d7 = 0;

A1=0;A0=0;選擇PA口

//pa口--數碼管的段選
//根據原理圖設置pa口各引腳,假設使pa輸出00000010控制第2個數碼管
pa0 = pa1=pa2=pa3=pa4=pa5=pa7= 0;
pa6 = 1;

A1=0;A0=1;選擇PB口

//PB口--數碼管的位選
//根據原理圖設置pb口各引腳,假設使pb輸出00000001控制數碼管顯示0
pa0 = pa1=pa2=pa3=pa4=pa5=pa6= 0;
pa7 = 1;

閱讀全文

與8255c編程怎麼設置相關的資料

熱點內容
蘋果手機怎麼會顯示多個App 瀏覽:237
不去互聯網程序員 瀏覽:550
電腦qq郵箱解壓的圖片保存在哪裡 瀏覽:544
嵌入命令行 瀏覽:91
檔案為什麼被加密 瀏覽:486
十天學會單片機13 瀏覽:875
榮耀怎麼設置讓app一直運行 瀏覽:993
共享文件夾能在哪裡找到 瀏覽:435
旅遊訂旅店用什麼app 瀏覽:240
一個女程序員的聲音 瀏覽:496
魔術app怎麼用 瀏覽:340
單片機有4個8位的io口 瀏覽:897
win10rar解壓縮軟體 瀏覽:169
plc教程pdf 瀏覽:668
pythonshell清屏命令 瀏覽:281
檢測到加密狗注冊伺服器失敗 瀏覽:205
解壓後手機如何安裝 瀏覽:521
極客學院app為什麼下架 瀏覽:14
圖片批量壓縮綠色版 瀏覽:656
東北程序員帥哥 瀏覽:709