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。然後再與需要用到的口傳輸數據。不知道有沒有說清楚。
你找一本單片機書好好看看,匯編並不難,看明白匯編,單片機就理解差不多了。
2. 82c55ac 是單片機嘛
不是單片機,他是一個單片機介面擴展晶元,單片機介面不夠的時候用來擴展的。簡單的說就是把單片機的其中一個8位口加以擴展,很多單片機的書都有介紹它怎麼跟單片機連接的。它有A,B,C三個口,有3種工作方式,具體的方式要通過寄存器設置。我這有一份數據手冊,是英文的,你要的話說一聲,你也可以上網搜,應該有中文的。
3. 求8255C語言編程
========================
下面的代碼是編譯和運行方式如下:
#包括<stdio.h>
#包括<conio.h>
#定義PI 3.14。
無效的主要()
{
INT R = 0;
?整數k = 0;
?輸出(「請輸入一個半徑為r:\ n」);
?scanf的(「%d」,&R);
輸出(「\ n \ n請輸入處理要求的\ n 1。計算面積?一個圓圈\ n 2計算一個圓的周長\ n 3。計算一個圓的周長和面積?一個圓\ n「);
scanf函數(「%d」,&K);
而(1)
?{
?開關(K)
?{
?案例1:
?printf(「請的面積?一個圓圈:0.2%F \ n」,PI * R * R);
?;
?案例2:
?輸出(「圓的周長:%.2 F \?」,2 * PI * R);
?;
?案例3:
?printf(「請的面積?一個圓圈:0.2%F \ n」,PI * R * R);
?輸出(「圓的周長:%.2 F \?」,2 * PI * R);
?;
?默認情況下:
?printf(「請誤差要求!\ n」);
?;
?}
輸出(「\ n \ n請輸入處理要求的\ n 1。計算面積?一個圓圈\ n 2計算一個圓的周長\ n 3。計算一個圓的周長和面積?一個圓\ n「);
scanf函數(「%d」,&K);
?}
?的getch();
}
4. 8255編程
RESET:復位輸入線,當該輸入端外於高電平時,所有內部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成輸入方式。
CS:晶元選擇信號線,當這個輸入引腳為低電平時,即/CS=0時,表示晶元被選中,允許8255與CPU進行通訊;/CS=1時,8255無法與CPU做數據傳輸.
RD:讀信號線,當這個輸入引腳為低電平時,即/RD=0且/CS=0時,允許8255通過數據匯流排向CPU發送數據或狀態信息,即CPU從8255讀取信息或數據。
WR:寫入信號,當這個輸入引腳為低電平時,即/WR=0且/CS=0時,允許CPU將數據或控制字寫入8255。
D0~D7:三態雙向數據匯流排,8255與CPU數據傳送的通道,當CPU 執行輸入輸出指令時,通過它實現8位數據的讀/寫操作,控制字和狀態信息也通過數據匯流排傳送。
PA0~PA7:埠A輸入輸出線,一個8位的數據輸出鎖存器/緩沖器, 一個8位的數據輸入鎖存器。
PB0~PB7:埠B輸入輸出線,一個8位的I/O鎖存器, 一個8位的輸入輸出緩沖器。
PC0~PC7:埠C輸入輸出線,一個8位的數據輸出鎖存器/緩沖器, 一個8位的數據輸入緩沖器。埠C可以通過工作方式設定而分成2個4位的埠, 每個4位的埠包含一個4位的鎖存器,分別與埠A和埠B配合使用,可作為控制信號輸出或狀態信號輸入埠。'
A0,A1:地址選擇線,用來選擇8255的PA口,PB口,PC口和控制寄存器.
當A0=0,A1=0時,PA口被選擇;
當A0=0,A1=1時,PB口被選擇;
當A0=1,A1=0時,PC口被選擇;
當A0=1.A1=1時,控制寄存器被選擇.
5. 82C55功能是什麼
82C55功能:
82C55晶元是一種常規的用於編程I/O設備,為應用於微處理器設計,它有24個I/O插腳可以為2組12插腳獨立編程,用於3種主要模式的操作。第一種模式,每一組12個I/O插腳可以編程設定4個插角作為輸入貨輸出。剩下的四個針角,3個用於握手和中斷控制信號,第三種模式,雙向匯流排控制模式,使用8個針角用於匯流排控制,還有5個針角,從其他組中借用1個角用於握手。
6. 求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);
}
7. 可編程並行介面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口的位輸出。
8. 微機原理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 ;主程序結束
9. 82C55A的什麼命令可以目測判斷99h與0fh
1、99h命令字:
寫入8255控制口
作用是:對8255作初始化,A口及C口方式0輸入,B口方式0輸出;
2、0Fh命令字:
入8255控制口
作用是:對C口的最高位PC7置1,C口其餘位保持原狀。
(9)82c55編程擴展閱讀:
8255作為主機與外設的連接晶元,必須提供與主機相連的3個匯流排介面,即數據線、地址線、控制線介面。同時必須具有與外設連接的介面A、B、C口。由於8255可編程,所以必須具有邏輯控制部分,因而8255內部結構分為3個部分:與CPU連接部分、與外設連接部分、控制部分。