文档库 最新最全的文档下载
当前位置:文档库 › SPMC65 单片机

SPMC65 单片机

SPMC65 单片机
SPMC65 单片机

SPMC65 系列单片机最多有 6 组 8 位并行端口:端口 A 、端口 B 、端口 C 、端口 D 、端口 E 和端口 F 。

SPMC65 系列单片机 I/O 端口具有 4mA 的推电流能力( driving )及 10mA 的灌电流( sinking )能力,其中有两个 I/O 端口的灌电流能力可达 20mA 。详细情况见表 3.1 和表 3.2 :

表 3 . 1 端口 A 的直流特性( VDD=5.0V )

表 3 . 2端口 B 的直流特性( VDD=5.0V )

端口 C 、端口 D 、端口 E 、端口 F 的驱动能力及输入方式与端口 A 的一样。

3.2 I/O 端口结构

SPMC65 系列单片机的每一位 I/O 端口都可独立地设置为输入或输出状态,并且每个端口都内置有弱上拉、弱下拉电阻,可以通过寄存器设置为上拉或下拉输入状态,也可设置为悬浮输入状态。

SPMC65 系列单片机的 I/O 端口结构如图 3.1 所示:

图 3 . 1 I/O 结构

读 P_IOX_Data(X=A ~ F) 寄存器将得到管脚的电平状态,向 P_IOX_Data 写入数据,会存入数据寄存器中。

P_IOX_Data 单元和 P_IOX_Buf 单元的区别:

对输出而言两者没有区别,但对输入而言,读 P_IOX_Data 单元读的是当前 I/O 的电平值,读 P_IOX_Buf 单元是读的是上次写入的数据。

3.3 I/O 端口寄存器

3.3.1 IO 端口的设置

SPMC65 系列单片机的 I/O 控制寄存器分别为:数据寄存器 P_IOX_Data 、方向寄存器 P_IOX_Dir 、属性寄存器P_IOX_Attrib 和数据锁存寄存器 P_IOX_Buf ( X=A~F )。

通常,对某一个 I/O 端口的设置包括以下 3 个基本项:数据寄存器 Data 、属性寄存器 Attribution 和方向控制寄存器 Direction 。

其具体作用如下:

?方向控制寄存器 P_IOX_Dir 将管脚设置为输入或输出

?属性寄存器 P_IOX_Attrib 将管脚设置为悬浮或不悬浮

?当管脚作为输入时,数据寄存器 P_IOX_Data 将其设置为上拉或下拉;当管脚作为输出时,写入数值到数据寄存器Data 里,便可在端口输出相应的的电平。

I/O 端口的组合控制设置如表 3.3 所列。

表 3 . 3 I/O 端口的组合控制设置

IO 口的默认状态需要设置芯片配置选项,具体设置方法请参考第十章中的介绍。( X=A~F )

3.3.2 端口A

端口 A 的控制寄存器为:数据寄存器 P_IOA_Data 、方向寄存器 P_IOA_Dir 、属性寄存器 P_IOA_Attrib 和数据锁存寄存器 P_IOA_Buf 。

?P_IOA_Data($00 , R/W)

A 口的数据寄存器,用于向 A 口写入或从 A 口读出数据。当 A 口处于输入状态时,读 P_IOA_Data 寄存器将得到管脚的电平状态,向 P_IOA_Data 写入数据,其值将会存入数据锁存器( P_IOA_Buf )中。当 A 口处于输出状态时,写数据到 A 口的数据寄存器会存入数据锁存器( P_IOA_Buf ),同时在管脚输出相对应电平状态;读 P_IOA_Data 寄存器也将得到管脚的电平状态。 P_IOA_Data 数据寄存器单元的默认初值为 #00h 。

端口 A 数据寄存器 P_IOA_Data 的设置见表 3.4

表 3 . 4端口 A 数据寄存器 P_IOA_Data ( $00 , R/W )

Bit [7:0] P_IOA_Data :端口 A 数据寄存器

读:读取端口 A 外部管脚上的电平状态值

写:写入数据到端口 A 的数据锁存器中 ($59)

?P_IOA_Buf($59 , R/W)

A 口的数据锁存寄存器, P_IOA_Buf 是一个专门用于存储端口数据的寄存器,并用来对端口各管脚进行位操作,而不直接用 P_IOA_Data 寄存器来操作。而读取 P_IOA_Buf 的值则可得到上次写入寄存器 P_IOA_Data 或 P_IOA_Buf 的值。端口 A 数据锁存器 P_IOA_Buf 的默认初值为 #00h 。

端口 A 数据锁存器 P_IOA_Buf 的设置见表 3.5

表 3 . 5 端口 A 数据锁存器 P_IOA_Buf ( $59 , R/W )

?P_IOA_Dir($04 , R/W)

A 口的方向寄存器,用来设置 A 口是输入 / 输出状态。该方向控制寄存器可以写入或从该寄存器内读出方向控制向量。方向寄存器的每一个位决定了对应口位的输入 / 输出状态: 0 为输入, 1 为输出。 P_IOA_Dir 方向寄存器单元的默认初值为 #00h 。

端口 A 方向寄存器 P_IOA_Dir 的设置见表 3.6 :

表 3 . 6端口 A 方向寄存器 P_IOA_Dir ( $04 , R/W )

Bit [7:0] P_IOA_Dir :端口 A 方向寄存器

0 = 输入

1 = 输出

?P_IOA_Attrib($08 , R/W)

A 口的属性寄存器,用于 A 口属性的设置。

端口 A 属性寄存器 P_IOA_Attrib 的设置见表 3.7 :

表 3 . 7端口 A 属性寄存器 P_IOA_Attrib ( $08 , R/W )

Bit [7:0] P_IOA_Attrib :端口 A 属性寄存器

0 = 不悬浮

1 = 悬浮输入

【例 4-1 】:将端口 A[7:0] 设置为输出状态,并输出数据:

对应的口位的设置见表 3.8 :

表 3 . 8 I/O 口位设置

【例 4-2 】:将端口 A[7:0] 设置为下拉输入:

对应的口位的设置见表 3.9

表 3 . 9 I/O 口位设置

3.3.3 端口B

端口 B 的控制寄存器为:数据寄存器 P_IOB_Data 、方向寄存器 P_IOB_Dir 、属性寄存器 P_IOB_Attrib 和数据锁存寄存器 P_IOB_Buf 。

■ 端口 B 数据寄存器 P_IOB_Data ( $01 , R/W );

■ 端口 B 方向寄存器 P_IOB_Dir ( $05 , R/W );

■ 端口 B 属性寄存器 P_IOB_Attrib ( $09 , R/W );

■ 端口 B 数据锁存器 P_IOB_Buf ( $5A , R/W )。

3.3.4 端口C

端口 C 的控制寄存器为:数据寄存器 P_IOC_Data 、方向寄存器 P_IOC_Dir 、属性寄存器 P_IOC_Attrib 和数据锁存寄存器 P_IOC_Buf 。

■ 端口 C 数据寄存器 P_IOC_Data ( $02 , R/W );

■ 端口 C 属性寄存器 P_IOC_Attrib ( $0A , R/W );

■ 端口 C 数据锁存器 P_IOC_Buf ( $5B , R/W )。

3.3.5 端口D

端口 D 的控制寄存器为:数据寄存器 P_IOD_Data 、方向寄存器 P_IOD_Dir 、属性寄存器 P_IOD_Attrib 和数据锁存寄存器 P_IOD_Buf 。

■ 端口 D 数据寄存器 P_IOD_Data ( $03 , R/W );

■ 端口 D 方向寄存器 P_IOD_Dir ( $07 , R/W );

■ 端口 D 属性寄存器 P_IOD_Attrib ( $0B , R/W );

■ 端口 D 数据锁存器 P_IOD_Buf ( $5C , R/W )。

3.3.6 端口E

端口 E 的控制寄存器为:数据寄存器 P_IOE_Data 、方向寄存器 P_IOE_Dir 、属性寄存器 P_IOE_Attrib 和数据锁存寄存器 P_IOE_Buf 。

■ R/W );

■ 端口 E 方向寄存器 P_IOE_Dir ( $42 , R/W );

■ 端口 E 属性寄存器 P_IOE_Attrib ( $44 , R/W );

■ 端口 E 数据锁存器 P_IOE_Buf ( $5D , R/W )。

3.3.7 端口F

端口 F 的控制寄存器为:数据寄存器 P_IOF_Data 、方向寄存器 P_IOF_Dir 、属性寄存器 P_IOF_Attrib 和数据锁存寄存器 P_IOF_Buf 。

■ 端口 F 方向寄存器 P_IOF_Dir ( $43 , R/W );

■ 端口 F 属性寄存器 P_IOF_Attrib ( $45 , R/W );

■ 端口 F数据锁存器 P_IOF_Buf ( $5E , R/W )。

3.4 特殊功能

SPMC65 系列单片机的 I/O 端口除了具有一般的输入 / 输出功能外,还提供了一些特殊功能或与片内硬件功能模块复用;其中,端口 F 没有特殊功能或复用功能。

3.4.1 端口A 特殊功能:

端口 A 可以作为 A/D 转换的输入通道,具体见表 3.11 ,端口 A 的特殊功能详细见 A/D 部分。

3.4.2 端口B 特殊功能:

PB7 既可以作为 A/D 转换的输入通道,也可以作为 A/D 转换的外部参考电压输入; PB6 可以驱动频率式蜂鸣器;PB[5:4] 可以作为 Timer 外部事件输入或中断输入管脚; PB[3:2] 可以作为比较输出或 PWM 输出管脚; PB[1:0] 可以为捕获输入或 Timer 外部事件输入管脚。

SPMC65 系列单片机支持慢速输出功能, PB[7:6] 通常情况下作为普通 I/O 口,但是如果将信号斜率控制寄存器P_IO_Opt ($35) 的 bit0 设置为 1 ,便会打开 PB[7:6] 的慢速输出功能;此时当 PB[7:6] 输出从高电平变为低电平,将会延迟 250ns 左右,具体延迟时间由系统时钟( F SYS )决定。当单片机在进行远距离通信时,慢速输出功能可以防止电磁干扰。 P_IO_Opt 寄存器见表 3.10 。端口 B 的复用情况见表 3.11 。

表 3 . 10 慢速输出功能控制寄存器 P_IO_Opt ( $35 , R/W )

Bit [7:1] 保留

Bit 0 SLOWE :慢速输出功能使能位

1=PB[7:6] 开启慢速输出功能

0=PB[7:6] 关闭慢速输出功能

注:该寄存器必须连续写两次相同的值才能将值写入,该寄存器默认初值为 #00h 。

3.4.3 端口C 特殊功能:

PC[7:6] 可以用作 IIC 总线的复用端口、 PC[5:4] 可用于 UART 通讯接口、 PC[3:0] 用作 SPI 通讯接口。端口

C 各个管脚复用的特殊功能见表 3.11 。

3.4.4 端口D 特殊功能:

PD[7:6] 可作为比较输出或 PWM 输出管脚、 PD[5:4] 可作为外部中断输入或 Timer 外部事件输入管脚、PD[3:2] 可用于比较输出或 PWM 输出管脚、 PD[1:0] 可用作外部中断输入管脚。端口 D 各个管脚复用的特殊功能见表 3.11 ,详细描述见相应的章节。

3.4.5 端口E 特殊功能:

PE6 可以作为 D/A 转换的输出管脚, PE[5:2] 可以用于模拟电压比较器输入及比较参考电压输入。端口 E 各个管脚复用的特殊功能见表 3.11 ,详细描述见相应的章节。

表 3 . 11 端口特殊功能

SPMC65 系列单片机的端口在使用前一般都需要对端口进行初始化,比如要使用端口 A 作为带下拉电阻的输入口时,就要在使用之前对端口进行初始化;而对于端口的复用功能在使用前,也有部分复用功能需要先初始化 I/O 口状态,比如需要用到外部中断输入的复用功能时,就要事先把对应的 I/O 端口设置为输入状态;类似的还有捕获输入、串行通讯接口。而部分复用功能在使用前是无需初始 I/O 端口状态的,如 ADC 输入、 DAC 输出、电压比较器功能、蜂鸣器输出、 PWM 输出、比较输出。具体的复用功能所需要的端口初始化要求请参考后面章节的介绍。

3.5 I/O 端口应用

【例 4-3 】:采用 32 管脚的 SPMC65P2408A ,外接四个按键,当按键按下或放开时,相应的发光二极管便会被熄灭或点亮用作指示。此例主要介绍 I/O 口的简单应用。

程序如下:

子函数 Switchx4.asm

CB_CmpTimers EQU 6 ; 最大比较次数

.PAGE0

GB_KeyValue DS 1 ; 键值

GB_KeyDownFlag DS 1 ; 键值改变标志

IB_LastValue DS 1 ; 最后一次的键值

IB_CmpTimers DS 1 ; 键值的平均比较次数

.DATA

.CODE

.PUBLIC F_PAInit

F_PAInit:

lda #0

sta P_IOA_Attrib

lda #$F0

sta P_IOA_Dir

sta P_IOA_Data

rts

;===================================================

.PUBLIC F_SWx4

F_SWx4:

lda P_IOA_Data ;扫描键盘

and #$0F ;得到键盘值

cmp GB_KeyValue ;键盘改变否

beq ?L_SWx4Exit ;没有改变

cmp IB_LastValue ;和上次取得键值比较

beq ?L_TimersInc ;相等?

sta IB_LastValue

jmp ?L_CmpClr

?L_TimersInc:

inc IB_CmpTimers ;

lda IB_CmpTimers ;

cmp #CB_CmpTimers ;比较 6 次键值,去抖采用 4ms 每次读取键盘值bcc ?L_SWx4Exit ;

lda IB_LastValue ;

sta GB_KeyValue ;

lda #1

sta GB_KeyDownFlag ; 设置键值改变标志

?L_CmpClr:

lda #0

sta IB_CmpTimers

?L_SWx4Exit:

rts

;==================================================

.PUBLIC F_Light

F_Light: ; 根据相应的键值,点亮对应的数码管lda GB_KeyValue

asl a

asl a

asl a

asl a

eor #$F0

硬件原理如图 3.2 所示:

图3.2 键盘及 LED 原理图

【例 4-4 】:本例采用 28 管脚的 SPMC65P2408A ,外接四个数码管作为显示部分。在程序中开辟了一个四字节的连续空间作为显示缓冲区,往这四个地址里分别写入数据( 0~F )便可以通过外接数码管显示出来。程序如下:

F_LED_4Disp:

ldx GB_IndexCom

inx ;LED 扫描

cpx #4 ;LED 扫描结束 ?

bcs ?L_ClearX ; 结束

stx GB_IndexCom

jmp ?L_Show

?L_ClearX:

ldx #$00

stx GB_IndexCom ; 从第一个 LED 开始显示?L_Show:

lda #$00

sta P_IOA_Data ; 清屏

lda T_SevenComTable,x

sta P_IOC_Data ;

lda GB_ShowBuf,x ; 从缓冲区得到数据

tax

lda T_SevenSegTable,x ; 得到段码

sta P_IOA_Data ; 将段码送到 A?口

?L_Div_End:

rts

;========================================================= F_IO_Init:

lda #$00 ;

sta P_IOA_Data ;

sta P_IOA_Buf ; 初始化 A 口为低电平输出

sta P_IOA_Attrib

lda #$FF

sta P_IOA_Dir

lda #0

sta P_IOC_Data

sta P_IOC_Buf

lda #0 ; 初始化 C 口为低电平输出

sta P_IOC_Attrib

lda #$F

sta P_IOC_Dir

rts

;================================================================ F_DispBuf_Init:

lda #$1 ;

sta GB_ShowBuf ;

lda #$2 ;

sta GB_ShowBuf+1 ; 缓冲区初始化

lda #$3 ;

sta GB_ShowBuf+2 ;

lda #$4 ;

sta GB_ShowBuf+3 ;

rts

;=========================================================== T_SevenComTable: ; 位码

DB %00000001 ;LED '1'

DB %00000010 ;LED '2'

DB %00000100 ;LED '3'

DB %00001000 ;LED '4'

T_SevenSegTable: ; 段码

DB %00111111 ; 字符 '0'

DB %00000110 ; 字符 '1'

DB %01011011 ; 字符 '2'

DB %01001111 ; 字符 '3'

DB %01100110 ; 字符 '4'

DB %01101101 ; 字符 '5'

DB %01111101 ; 字符 '6'

DB %00000111 ; 字符 '7' DB %01111111 ; 字符 '8' DB %01101111 ; 字符 '9' DB %01110111 ; 字符 'A' DB %01111100 ; 字符 'B' DB %00111001 ; 字符 'C' DB %01011110 ; 字符 'D' DB %01111001 ; 字符 'E' DB %01110001 ; 字符 'F' 硬件原理如图 3.3 所示:

快速入门单片机汇编语言

快速入门单片机汇编语言 简要: 单片机有通用型和专用型之分。专用型是厂家为固定程序的执行专门开发研制的一种单片机,其程序不可更改。通用型单片机是常用的一种供学习或自主编制程序的单片机,其程序需要自己写入,可更改。单片机根据其基本操作处理位数不同可以分为:1位、4位、8位、16、32位单片机。 正文: 在此我们主要讲解美国ATMEL公司的89C51单片机。 一、89C51单片机PDIP(双列直插式)封装引脚图: 其引脚功能如下: P0口(p0.0—p0.7):为双向三态口,可以作为输入/输出口。但在实际应用中通常作为地址/数据总线口,即为低8位地址/数据总线分时复用。低8位地址在ALE信号的负跳变锁存到外部地址锁存器中,而高8位地址由P2口输出。 P1口(p1.0—p1.7):其每一位都能作为可编程的输入或输出线。 P2口(p2.0—p2.7):每一位也都可作为输入或输出线用,当扩展系统外设时,可作为扩展系统的地址总线高8位,与P0口一起组成16位地址总线。对89c51单片机来说,P2口一般只作为地址总线使用,而不作为I/O线直接与外设相连。 P3口(p3.0—p3.7):其为双功能口,作为第一功能使用时,其功能与P1口相同。当

作为第二功能使用时,每一位功能如下表所示。 P3口第二功能 Rst\Vpd:上电复位端和掉电保护端。 XTAL1(xtal2):外接晶振一脚,分别接晶振的一端。 Gnd:电源地。 Vcc:电源正级,接+5V。

PROG\ALE:地址锁存控制端 PSEN:片外程序存储器读选通信号输出端,低电平有效。 EA\vpp:访问外部程序储存器控制信号,低电平有效。当EA为高电平时访问片内存储器,若超出范围则自动访问外部程序存储器。当EA为低电平时只访问外部程序存储器。 二、常用指令及其格式介绍: 1、指令格式: [标号:]操作码 [ 目的操作数][,操作源][;注释] 例如:LOOP:ADD A,#0FFH ;(A)←(A)+FFH 2、常用符号: Ri和Rn:R表示工作寄存器,i表示1和0,n表示0~7。 rel:相对地址、地址偏移量,主要用于无条件相对短转移指令和条件转移指令。 #data:包含于指令中的8位立即数。 #data16:包含于指令中的16位立即数。 addr16:16位目的地址。 direct:直接寻址的地址。

51单片机串口通信,232通信,485通信,程序

51单片机串口通信,232通信,485通信,程序代码1:232通信 #include #define uchar unsigned char #define uint unsigned int uchar flag,a,i; uchar code table[]="i get"; void init() { TMOD=0X20; TH1=0XFD; TH0=0XFD; TR1=1; REN=1; SM0=0; SM1=1; EA=1; ES=1; } void main() { init();

while(1) { if(flag==1) { ES=0; for(i=0;i<6;i++) { SBUF=table[i]; while(!TI); TI=0; } SBUF=a; while(!TI); TI=0; ES=1; flag=0; } } } void ser() interrupt 4 {

RI=0; a=SBUF; flag=1; } 代码2:485通信 #include #include"1602.h" #define uchar unsigned char #define uint unsigned int unsigned char flag,a,i; uchar code table[]="i get "; void init() { TMOD=0X20; TH1=0Xfd; TL1=0Xfd; TR1=1; REN=1; SM0=0; SM1=1; EA=1; ES=1;

} void main() { init_1602(); init(); while(1) { if(flag==1) { display(0,a); } } } void ser() interrupt 4 { RI=0; a=SBUF; flag=1; } Love is not a maybe thing. You know when you love someone.

单片机串口通信C程序及应用实例

一、程序代码 #include//该头文件可到https://www.wendangku.net/doc/6b4725856.html,网站下载#define uint unsigned int #define uchar unsigned char uchar indata[4]; uchar outdata[4]; uchar flag; static uchar temp1,temp2,temp3,temp; static uchar R_counter,T_counter; void system_initial(void); void initial_comm(void); void delay(uchar x); void uart_send(void); void read_Instatus(void); serial_contral(void); void main() { system_initial(); initial_comm(); while(1) { if(flag==1) { ES = 0; serial_contral(); ES = 1; flag = 0; } else read_Instatus(); } } void uart_send(void) { for(T_counter=0;T_counter<4;T_counter++) { SBUF = outdata[T_counter]; while(TI == 0);

TI = 0; } T_counter = 0; } uart_receive(void) interrupt 4 { if(RI) { RI = 0; indata[R_counter] = SBUF; R_counter++; if(R_counter>=4) { R_counter = 0; flag = 1; } } } void system_initial(void) { P1M1 = 0x00; P1M0 = 0xff; P1 = 0xff; //初始化为全部关闭 temp3 = 0x3f;//初始化temp3的值与六路输出的初始值保持一致 temp = 0xf0; R_counter = 0; T_counter = 0; } void initial_comm(void) { SCON = 0x50; //设定串行口工作方式:mode 1 ; 8-bit UART,enable ucvr TMOD = 0x21; //TIMER 1;mode 2 ;8-Bit Reload PCON = 0x80; //波特率不加倍SMOD = 1 TH1 = 0xfa; //baud: 9600;fosc = 11.0596 IE = 0x90; // enable serial interrupt TR1 = 1; // timer 1 RI = 0; TI = 0; ES = 1; EA = 1; }

单片机串口通信的发送与接收(可编辑修改word版)

51 单片机的串口,是个全双工的串口,发送数据的同时,还可以接收数据。 当串行发送完毕后,将在标志位TI 置1,同样,当收到了数据后,也会在RI 置1。无 论RI 或TI 出现了1,只要串口中断处于开放状态,单片机都会进入串口中断处理程序。在中断程序中,要区分出来究竟是发送引起的中断,还是接收引起的中断,然后分别进行处理。 看到过一些书籍和文章,在串口收、发数据的处理方法上,很多人都有不妥之处。 接收数据时,基本上都是使用“中断方式”,这是正确合理的。 即:每当收到一个新数据,就在中断函数中,把RI 清零,并用一个变量,通知主函数, 收到了新数据。 发送数据时,很多的程序都是使用的“查询方式”,就是执行while(TI ==0); 这样的语句来 等待发送完毕。 这时,处理不好的话,就可能带来问题。 看了一些网友编写的程序,发现有如下几条容易出错: 1.有人在发送数据之前,先关闭了串口中断!等待发送完毕后,再打开串口中断。 这样,在发送数据的等待期间内,如果收到了数据,将不能进入中断函数,也就不会保存的这个新收到的数据。 这种处理方法,就会遗漏收到的数据。 2.有人在发送数据之前,并没有关闭串口中断,当TI = 1 时,是可以进入中断程序的。 但是,却在中断函数中,将TI 清零! 这样,在主函数中的while(TI ==0);,将永远等不到发送结束的标志。 3.还有人在中断程序中,并没有区分中断的来源,反而让发送引起的中断,执行了接收 中断的程序。 对此,做而论道发表自己常用的方法: 接收数据时,使用“中断方式”,清除RI 后,用一个变量通知主函数,收到新数据。 发送数据时,也用“中断方式”,清除TI 后,用另一个变量通知主函数,数据发送完毕。 这样一来,收、发两者基本一致,编写程序也很规范、易懂。 更重要的是,主函数中,不用在那儿死等发送完毕,可以有更多的时间查看其它的标志。 实例: 求一个PC 与单片机串口通信的程序,要求如下: 1、如果在电脑上发送以$开始的字符串,则将整个字符串原样返回(字符串长度不是固定的)。

51单片机与PC串口通讯

目录 第1章需求分析 ............................................................................................................................ - 1 - 1.1课题名称 (1) 1.2任务 (1) 1.3要求 (1) 1.4设计思想 (1) 1.5课程设计环境 (1) 1.6设备运行环境 (2) 1.7我在本实验中完成的任务 (2) 第2章概要设计 ............................................................................................................................ - 2 - 2.1程序流程图 (2) 2.2设计方法及原理 (3) 第3章详细设计 ............................................................................................................................ - 3 - 3.1电路原理 (3) 3.1.1STC89C52芯片 ............................................................................................................. - 3 -3.2串口通信协议 (4) 3.3程序设计 (5) 3.3.1主程序模块 .................................................................................................................... - 5 - 3.3.2串口通讯模块 ................................................................................................................ - 6 - 3.3.3控制部分文件 ................................................................................................................ - 8 - 3.3.4公共部分模块 .............................................................................................................. - 11 -3.4电路搭建 (12) 3.4.1电路原理图 .................................................................................................................. - 12 -第4章上位机关键代码分析 ...................................................................................................... - 12 - 4.1打开串口操作 (12) 4.2后台线程处理串口程序 (15) 4.3程序运行界面 (18) 第5章课程设计总结与体会 ...................................................................................................... - 19 -第6章致谢 .................................................................................................................................. - 19 -参考文献........................................................................................................................................... - 19 -

快速入门单片机汇编语言

快速入门单片机汇编语 言 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

快速入门单片机汇编语言 简要: 单片机有通用型和专用型之分。专用型是厂家为固定程序的执行专门开发研制的一种单片机,其程序不可更改。通用型单片机是常用的一种供学习或自主编制程序的单片机,其程序需要自己写入,可更改。单片机根据其基本操作处理位数不同可以分为:1位、4位、8位、16、32位单片机。 正文: 在此我们主要讲解美国ATMEL公司的89C51单片机。 一、89C51单片机PDIP(双列直插式)封装引脚图: 其引脚功能如下: P0口(—):为双向三态口,可以作为输入/输出口。但在实际应用中通常作为地址/数据总线口,即为低8位地址/数据总线分时复用。低8位地址在ALE信号的负跳变锁存到外部地址锁存器中,而高8位地址由P2口输出。 P1口(—):其每一位都能作为可编程的输入或输出线。 P2口(—):每一位也都可作为输入或输出线用,当扩展系统外设时,可作为扩展系统的地址总线高8位,与P0口一起组成16位地址总线。对89c51单片机来说,P2口一般只作为地址总线使用,而不作为I/O线直接与外设相连。 P3口(—):其为双功能口,作为第一功能使用时,其功能与P1口相同。当作为第二功能使用时,每一位功能如下表所示。 P3口第二功能

Rst\Vpd:上电复位端和掉电保护端。 XTAL1(xtal2):外接晶振一脚,分别接晶振的一端。 Gnd:电源地。 Vcc:电源正级,接+5V。 PROG\ALE:地址锁存控制端 PSEN:片外程序存储器读选通信号输出端,低电平有效。 EA\vpp:访问外部程序储存器控制信号,低电平有效。当EA为高电平时访问片内存储器,若超出范围则自动访问外部程序存储器。当EA为低电平时只访问外部程序存储器。 二、常用指令及其格式介绍: 1、指令格式: [标号:]操作码 [ 目的操作数][,操作源][;注释] 例如:LOOP:ADD A,#0FFH ;(A)←(A)+FFH 2、常用符号: Ri和Rn:R表示工作寄存器,i表示1和0,n表示0~7。 rel:相对地址、地址偏移量,主要用于无条件相对短转移指令和条件转移指令。 #data:包含于指令中的8位立即数。 #data16:包含于指令中的16位立即数。

单片机C语言快速入门学

单片机c语言入门学 相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧。不过有些朋友可能只听说他叫单片机,他的全称是什么也许并不太清楚, 更不用说他的英文全称和简称了。单片机是一块在集成电路芯片上集成了一台有一定规模的微型计算机。简称为:单片微型计算机或单片机 (Single Chip Computer)。单片机的应用到处可见,应用领域广泛,主要应用在智能仪表、实时控制、通信、家电等方面。不过这一切都没 什么关系,因为我(当然也包括任何人)都是从不知道转变成知道的,再转变成精通的。现在我只想把我学习单片机的经历,详细地讲叙给大 家听听,可能有些大虾会笑话我,想:那么简单的东西还在这里卖弄。但是你错了,我只是把我个人学习的经历讲述一遍而已,仅仅对那些想 学习单片机,但又找不到好方法或者途径的朋友,提供一个帮助,使他们在学习过程中,尽量少走些弯路而已! 首先,你必须有学习单片机的热情,不是说今天去图书馆看了一个下午关于单片机的书,而明天玩上半天,后天就不知道那个本书在讲什 么东西了。还是先说说我吧,我从大二的第一个学期期末的时候才开始接触单片机,但在这之前,正如上面所说的:我知道有种芯片叫单片机, 但是具体长成什么样子,却一点也不知道!看到这里很多朋友一定会忍不住发笑。嘿嘿,你可千万别笑,有些大四毕业的人也同样不知道单片 机长成什么样子呢!而我对单片机的痴迷更是常人所不能想象的地步,大二的期末考试,我全放弃了复习,每当室友拿着书在埋头复习的时候, 我却捧着自己从图书馆借的单片机书在那看,虽然有很多不懂,但是我还是坚持了下来,当时我就想过,为了单片机值不值得我这样去付出, 或许这也是在一些三流学校的好处吧,考试挂科后,明年开学交上几十元一门的补考费,应该大部分都能过了。于是,我横下一条心,坚持看 我的单片机书和资料。 当你明白了单片机是这么一回事的时候,显而易见的问题出来了:我要选择那种语言为单片机编写程序呢?这个问题,困扰了我好久。具 体选择C51还是A51呢?汇编在我们大二之前并没有开过课,虽然看着人家的讲解,很容易明白单片机的每一时刻的具体工作情况,但是一合上 书或者资料,自己却什么也不知道了,根本不用说自己写程序了。于是,我最终还是决定学C51,毕竟C51和我们课上讲的C语言,有些类似, 编程的思想可以说是相通的。而且C51还有更大的优点就是编写大程序时的优越性更不言而喻,当然在那时,我并没有想的那么深远,C51的特 点,还是在后来的实践过程中,渐渐体会到的!朋友如果你选择了C51,那么请继续往下看,如果你选择了A51,那么你可以不要看了!因为下面讲 的全是C方面的,完全在浪费你的时间! 呵呵 ^_^ 第二,既然你想学好单片机,你必须得舍得花钱,如果不买些芯片回来自己动手焊焊拆拆的(但是在后期会介绍给大家一个很好用的硬件 仿真软件,并不需要你用实验板和仿真器了,直接在你的PC上完成,但是软件毕竟是软件,从某个特定的意义上来说是并不能代替硬件的),即使 你每天捧着本书,把那本书翻烂,也永远学不会单片机的!刚接触单片机的朋友,看了资料,

单片机与PC机串口通信实现正文

毕业设计(论文)课题:单片机与PC机串口通信实现 学生: 孙波系部: 通信工程 班级: 通信1301 学号: 2013120325 指导教师: 童华 装订交卷日期: 2016年x月x日 装订顺序: (1)封面(2)毕业设计(论文)成绩评定记录(3)标题、中文摘要及关键词(4)正文(5)附录(6)参考文献

毕业设计(论文)成绩评定记录表 注:1.此表适用于不参加毕业答辩学生的毕业设计(论文)成绩评定; 2.平时成绩占40%、卷面评阅成绩占60%,在上面的评分表中,可分别按40分、60分来量化评分,二项相加所得总分即为总评成绩,总评成绩请转换为优秀、良好、中等、及格、不及格五等级计分。 教务处制

重庆电子工程职业学院 毕业设计(论文)开题报告 系别通信工程专业通信技术班级通信1301 学生姓名孙波学号2013120325 指导教师童华 一、毕业设计的内容和意义: 目前,随着计算机和微电子技术的高速发展,单片机在国民经济的各个领域的智能化控制中得到了非常广泛的应用。单片机已成为信息处理、物联网络、通信设备、工业控制、家用电器等各个领域不可缺少的智能部件。在一些工业控制中,经常需要以单片机作为下位机执行对被控对象的直接控制,以PC机为上位机完成复杂的数据处理,组成主从式控制系统。 为了提高系统管理的先进性,计算机工业自动控制和监测系统越来越多的采用主从式系统。较为常见的形式是由一台做管理用的上位机计算机(主机)和一台直接参与控制检测的下位机单片机(从机)构成的主从式系统,主机和从机之间以通讯的方式来协调工作。主机的作用一是向从机发送各种命令及参数;二是要及时收集、整理和分析从机发回的数据,供进一步的决策。从机被动的接收、执行主机发

STM32单片机快速入门V1.0概要

STM32 单片机快速入门 王志杰 2010年 5月 15日 目录 1 集成开发环境 (IDE ...................................................................................................................3 1.1 IAR 集成开发环境 ...............................................................................................................3 1.2 KEIL集成开发环 境 (20) 1.3 TrueSTUDIO集成开发环 境 (41) 2 附 录 ...........................................................................................................................................

.....54 2.1 源代码 main.c (54) 1集成开发环境(IDE 1.1IAR 集成开发环境 1.1.1安装 IAR 可从 IAR 网站上下载软件。 https://www.wendangku.net/doc/6b4725856.html, 下载安装,如下图所示:运行 IAR ,界面如下所示:

STM32

单片机快速入门 1.1.2创建一个工程 选择 File>New>Workspace STM32单片机快速入门新建一个 project ,选择

51单片机串口通信

一、串口通信原理 串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到计算机端,而且也能实现计算机对单片机的控制。由于其所需电缆线少,接线简单,所以在较远距离传输中,得到了广泛的运用。串口通信的工作原理请同学们参看教科书。 以下对串口通信中一些需要同学们注意的地方作一点说明: 1、波特率选择 波特率(Boud Rate)就是在串口通信中每秒能够发送的位数(bits/second)。MSC-51串行端口在四种工作模式下有不同的波特率计算方法。其中,模式0和模式2波特率计算很简单,请同学们参看教科书;模式1和模式3的波特率选择相同,故在此仅以工作模式1为例来说明串口通信波特率的选择。 在串行端口工作于模式1,其波特率将由计时/计数器1来产生,通常设置定时器工作于模式2(自动再加模式)。在此模式下波特率计算公式为:波特率=(1+SMOD)*晶振频率/(384*(256-TH1)) 其中,SMOD——寄存器PCON的第7位,称为波特率倍增位; TH1——定时器的重载值。 在选择波特率的时候需要考虑两点:首先,系统需要的通信速率。这要根据系统的运作特点,确定通信的频率范围。然后考虑通信时钟误差。使用同一晶振频率在选择不同的通信速率时通信时钟误差会有很大差别。为了通信的稳定,我们应该尽量选择时钟误差最小的频率进行通信。 下面举例说明波特率选择过程:假设系统要求的通信频率在20000bit/s以下,晶振频率为12MHz,设置SMOD=1(即波特率倍增)。则TH1=256-62500/波特率 根据波特率取值表,我们知道可以选取的波特率有:1200,2400,4800,9600,19200。列计数器重载值,通信误差如下表: 因此,在通信中,最好选用波特率为1200,2400,4800中的一个。 2、通信协议的使用 通信协议是通信设备在通信前的约定。单片机、计算机有了协议这种约定,通信双方才能明白对方的意图,以进行下一步动作。假定我们需要在PC机与单片机之间进行通信,在双方程式设计过程中,有如下约定:0xA1:单片机读取P0端口数据,并将读取数据返回PC机;0xA2:单片机从PC机接收一段控制数据;0xA3:单片机操作成功信息。 在系统工作过程中,单片机接收到PC机数据信息后,便查找协议,完成相应的操作。当单片机接收到0xA1时,读取P0端口数据,并将读取数据返回PC机;当单片机接收到0xA2时,单片机等待从PC机接收一段控制数据;当PC机接收到0xA3时,就表明单片机操作已经成功。 3、硬件连接 51单片机有一个全双工的串行通讯口,所以单片机和计算机之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如计算机的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。我们采用了三线制连接串口,也就是说和计算机的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。

51单片机与串口通信代码

51单片机与串口通信代码 2011年04月22日 17:18 本站整理作者:佚名用户评论(0) 关键字:串口通信(35) 串口调试 1. 发送:向总线上发命令 2. 接收:从总线接收命令,并分析是地址还是数据。 3. 定时发送:从内存中取数并向主机发送. 经过调试,以上功能基本实现,目前可以通过上位机对单片机进行实时控制。 程序如下: //这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收 //和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的 #i nclude #i nclude #i nclude #define INBUF_LEN 4 //数据长度 unsigned char inbuf1[INBUF_LEN]; unsigned char checksum,count3 , flag,temp,ch; bit read_flag=0; sbit cp=P1^1; sbit DIR=P1^2; int i; unsigned int xdata *RAMDATA; /*定义RAM地址指针*/ unsigned char a[6] ={0x11,0x22,0x33,0x44,0x55,0x66} ; void init_serialcomm(void) { SCON=0x50; //在11.0592MHz下,设置串行口波特率为9600,方式1,并允许接收

PCON=0x00; ES=1; TMOD=0x21; //定时器工作于方式2,自动装载方式 TH0=(65536-1000)%256; TL0=(65536-1000)/256; TL1=0xfd; TH1=0xfd; ET0=1; TR0=1; TR1=1; // TI=0; EA=1; // TI=1; RAMDATA=0x1F45; } void serial () interrupt 4 using 3 { if(RI) { RI=0; ch=SBUF; TI=1; //置SBUF空 switch(ch) { case 0x01 :printf("A"); TI=0;break; case 0x02 :printf("B"); TI=0;break; case 0x03 :printf("C"); TI=0;break;

STM8单片机入门快速教程

STM8单片机入门快速教程 一、前言 因个人在学习STM8时遇到许多困惑,所以编译一个 STM8快速入门教程,望能为初学者提供一些帮助。二、STM8使用的编译软件和下载软件 STM8有对应库函数,但我用的是IAR编译软件,是直 接操作寄存器,所以就不对库函数多少什么。IAR是最 近一两年才支持STM8编译的,所以软件嘚找好,注册 机嘚选对。下载软件我是用现成的“轩微科技STM8编 程下载器”淘宝要60多一个。因操作寄存器所以要具 备几个文档,具体我配带在文件里面了。编程用的头文 件是#include 或#include , 根据型号而定,有的型号不一样定义的地址会不一样 的。 三、IO的输出、输入 每个单片机我想最重要懂的应该是它怎么输出高低电平还怎么输入。STM8管脚分三级流水控制。分别有方向寄存器、控制寄存器、还有输出/输入寄存器。 方向寄存器:是控制IO口成输出还是输入状态 控制寄存器:有两个,是控制IO口以什么模式输出或输入 因为高级单片机有很多种输出模式,比如上拉 输入,推挽输出等....。

输出/输入寄存器:其分别有单独的输出寄存器和输入寄存器,输出寄存器给其高低电平就输出高低电平 (条件是配置为输出状态时)。输入寄存器无 论是在输出还是输入模式都可读取IO的高低 电平状态。 其具体设置可下面: DDR CR1 CR2 引脚设置 0 0 0 悬浮输入 0 0 1 上拉输入 0 1 0 中断悬浮输入 0 1 1 中断上拉输入 1 0 0 开漏输出 1 1 0 推挽输出 1 X 1 输出(最快速度为10MHZ)

51单片机串口通信讲解

51系列单片机串口通信实例教程 单片机的串口通信看起来是很复杂的,主要是因为他用到了更多的寄存器,与前面的知识相比他更具综合能力,写起来考虑的问题自然也变多了.而前面学习过的定时器与中断将是单片机通信的基础. 单片机的中断系统中第4个中断就是串口中断,要进行串口通信首先就要打开CPU总中断EA,还要打开串口通信中断ES,这是串口通信的前堤,而串口通信也跟计时器一样有很多的模式,因此我们还要设置SCON寄存器来指定采用哪一种方式进行通信,而在通信的过程中,我们还要设定通信的波特率,不然的话,单片机是没办法进行采样的,这样也不会得到正确的结果了.我在实验过程中用到的是1号定时器来设定的波特率,用到了计时器方式2,也就是8位自动重装,这样可以简化编程,她的实现思想就是将常数放入TH,而TL中则是初始化参数,当溢出时,单片机会自动将TH中的常数装入TL中. 再来说说波特率,我们为什么要设定波特率,因为单片机会以16倍波特率的速度进行采样,而在实验中我们用的是10位异步收发方式,因此要将SM0置0,SM1置1.而其中的10位

有8位数据位,第一位和最后一位是发送数据的起始与结束.采用高的皮特率就不会出错啦.而波特率是有一个公式的: 方式0的波特率 = fosc/12 方式2的波特率 =(2SMOD/64)· fosc 方式1的波特率 =(2SMOD/32)·(T1溢出率) 方式3的波特率 =(2SMOD/32)·(T1溢出率) T1 溢出率= fosc /{12×[256 -(TH1)]} 根据公式我们很容易就算出当晶振为110592HZ时,要达到9600的波特率,我们只需要将TL1置FDH即可,如下图: 除此之外,你还要将SCON中的REN位置1,不然的话,单片机是不会接收数据的. 还有不要忘了选择定时器的工作方式,设置TMOD为0x20既是工作方式2,8位自动重装定时器. 这样一来,初始批工作算是差不多了.而串口通信分为中断方式,和查询方式,如果你想用查询方式你也不用设置IE寄存器了. 在串口通信中,还有一个很重要的寄存器SBUF,其实也不是一个,是两个,只是它们共用同一个地址,再热气表达式的不同,单片机会自动选择使用哪一个SBUF. 下面是我写的一个例子程序,产生的效果是:向单片机发送任一个0~255之间的数,将会被显示到数码管上.并且单片机还会自动把刚才传过去的数又发送回来 ,实验过程中用到了几个工具如下:

单片机串口通信实验

滨江学院 单片机原理及应用 题目单片机串口通信实验 院系____电子工程系______ 专业_____通信工程_______ 学生姓名_______******_______ 学号______**********___ 二O一二年六月十日

单片机串口通信实验 摘要:CPU 与其外部设备之间的信息交换或计算机之间的信息交换均可被称为“通信”。串行通信是指数据逐位顺序串行传送的通信方式。串行通信只需一对传输线,并且可以利用电话线等现有通信信道作为传输介质,因而可以大大降低传输线路的成本。 关键字:51单片机,串口通信,全双工 正文:MCS 一51 系列单片机内部有一个可编程的全双工串行通信口,可作为通用异步接收和发送器,也可作为同步移位寄存器用。该串行口有4 种工作模式。片内的定时器/计数器可用作波特率发生器。接收、发送均可工作在查询方式或中断方式。MCS 一51 系列单片机内部的串行通信口,有二个物理上相互独立的接收、发送缓冲器SBUF,对外也有两条独立的收、发信号线RxD(P3.0)和TxD (P3.1)。可以同时发送、接收数据,实现全双工传送。发送缓冲器和接收缓冲器不能互换,发送缓冲器只能写入不能读出,接收缓冲器只能读出不能写入。两个缓冲器占用同一个端口地址(99H)。具体对哪一个缓冲器进行操作,取决于所用的指令是发送还是接收。 一、实验 1、实验目的 掌握单片机串行口工作原理,单片机串行口与PC机的通信工作原理及编程方法。 2、实验器材 微机、串口通讯软件、程序烧录软件、面包板一块、芯片一块、电焊等 3、实验内容 实验板上有RS-232接口,将该接口与PC机的串口连接,可以实现单片机与PC机的串行通信,进行双向数据传输。本实验要求当PC机向实验板发送的数字在实验板上显示,按实验板键盘输入的数字在PC机上显示,并用串口助手工具软件进行调试。 4、实验原理 51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通信。进行串行通讯信要满足一定的条件,比如电脑的串口是RS232电平(-5~-15V为1,+5~+15V为0),而单片机的串口是TTL电平(大于+2.4V

1小时单片机c语言快速入门1

1小时c语言入门 (一) 相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧。不过有些朋友可能只听说他叫单片机,他的全称是什么也许并不太清楚,更不用说他的英文全称和简称了。单片机是一块在集成电路芯片上集成了一台有一定规模的微型计算机。简称为:单片微型计算机或单片机(Single Chip Computer)。单片机的应用到处可见,应用领域广泛,主要应用在智能仪表、实时控制、通信、家电等方面。不过这一切都没什么关系,因为我(当然也包括任何人)都是从不知道转变成知道的,再转变成精通的。现在我只想把我学习单片机的经历,详细地讲叙给大家听听,可能有些大虾会笑话我,想:那么简单的东西还在这里卖弄。但是你错了,我只是把我个人学习的经历讲述一遍而已,仅仅对那些想学习单片机,但又找不到好方法或者途径的朋友,提供一个帮助,使他们在学习过程中,尽量少走些弯路而已! 首先,你必须有学习单片机的热情,不是说今天去图书馆看了一个下午关于单片机的书,而明天玩上半天,后天就不知道那个本书在讲什么东西了。还是先说说我吧,我从大二的第一个学期期末的时候才开始接触单片机,但在这之前,正如上面所说的:我知道有种芯片叫单片机,但是具体长成什么样子,却一点也不知道!看到这里很多朋友一定会忍不住发笑。嘿嘿,你可千万别笑,有些大四毕业的人也同样不知道单片机长成什么样子呢!而我对单片机的痴迷更是常人所不能想象的地步,大二的期末考试,我全放弃了复习,每当室友拿着

书在埋头复习的时候,我却捧着自己从图书馆借的单片机书在那看,虽然有很多不懂,但是我还是坚持了下来,当时我就想过,为了单片机值不值得我这样去付出,或许这也是在一些三流学校的好处吧,考试挂科后,明年开学交上几十元一门的补考费,应该大部分都能过了。于是,我横下一条心,坚持看我的单片机书和资料。 当你明白了单片机是这么一回事的时候,显而易见的问题出来了:我要选择那种语言为单片机编写程序呢?这个问题,困扰了我好久。具体选择C51还是A51呢?汇编在我们大二之前并没有开过课,虽然看着人家的讲解,很容易明白单片机的每一时刻的具体工作情况,但是一合上书或者资料,自己却什么也不知道了,根本不用说自己写程序了。于是,我最终还是决定学C51,毕竟C51和我们课上讲的C语言,有些类似,编程的思想可以说是相通的。而且C51还有更大的优点就是编写大程序时的优越性更不言而喻,当然在那时,我并没有想的那么深远,C51的特点,还是在后来的实践过程中,渐渐体会到的!朋友如果你选择了C51,那么请继续往下看,如果你选择了A51,那么你可以不要看了!因为下面讲的全是C方面的,完全在浪费你的时间! 呵呵^_^ 第二,既然你想学好单片机,你必须得舍得花钱,如果不买些芯片回来自己动手焊焊拆拆的(但是在后期会介绍给大家一个很好用的硬件仿真软件,并不需要你用实验板和仿真器了,直接在你的PC上完成,但是软件毕竟是软件,从某个特定的意义上来说是并不能代替硬件的),即使你每天捧着本书,把那本书翻烂,也永远学不会单片机的!

单片机入门常用知识

概述: 所谓单片机就是能在一个芯片上完成计算机处理功能的设备,在芯片的内部有计算单元、数据处理单元、程序存储以及常用的外部接口管理单元。在软件程序的管理控制下可实现设计者所需要的功能。 最初的单片机受芯片设计密度的限制,功能和性能不强,随着技术的发展,目前的单片机可实现大多数的常用接口功能,软件的存储空间也越来越大,处理能力大幅增加。 单片机常用功能: 普通端口功能:单片机都带有多个逻辑端口,可作为逻辑状态的输入输出使用,可用于控制或读取外部状态。 定时功能:单片机内部包含有定时器,通过对定时时钟进行计数来产生需要的延时,延时的长短可通过设置定时器的计数值来设置。 中断功能:单片机内部设定有多个中断入口,每当产生中断条件后,程序自动跳入到中断入口,通过中断入口的跳转指令转到中断处理程序,执行完后返回到产生中断跳转程序处的下一个指令地址。在单片机接口上,有专用的中断管脚,可设置为电平中断或边沿中断,当管脚出现条件时,设置对应的中断标志,触发相应中断。除了管脚中断,串口、定时、A/D等几乎都可产生中断。同时,中断的响应还需要设置对应的寄存器到要求的状态才可。 串口功能:串口相对于并口来说,数据是通过一个管脚送出或读入,数据长度一般为8位,按顺序移位送出。串口特点具有实用管脚少,应用方式灵活的特点,通过RS232电平转换可直接和计算机的串

口进行通讯。 A/D功能:可直接输入模拟信号,软件发出转换信号后,信号的幅值可通过转换变换为数值信号送对应的寄存器上。 D/A功能:可直接输出模拟信号,信号的幅值可通过D/A端口的设置数值来设定。 以上为常用功能,有些单片机还有SPI、USB、CAN等多种接口外部常用设备: 显示和输入:单片机的处理信息一般通过液晶屏或数码管来显示处理内容,液晶屏或数码管可直接连接到单片机管脚上,按照显示需求设置软件即可,输入多用按键输入,也可直接连接到单片机管脚上,软件通过监测管脚状态可获得按键信息。 串口应用:单片机串口信号一般为TTL电平,外部常用RS232或RS485,在应用中需要加对用的转换芯片或模块。 开发环境: 单片机储存的程序为二进制格式,把程序写入到单片机需要专用的设备,早期完成这个功能采用编程器来完成,编程器通过打印机口或串口以及USB口和计算机连接,单片机则通过可锁插座装入到编程器上,通过计算机上的软件选择好单片机型号,读入要下载的二进制软件,然后运行编程,则完成下载。目前,则是通过仿真器(下载线)来完成,一般是通过USB口连接计算机,计算机上下载功能和仿真功能集合到一起。通过编译软件把软件编译成二进制文件,然后直接下载即可。下载后的软件可通过仿真运行进行调试。

51单片机串口通信的原理与应用流程解析

51单片机串口通信的原理与应用流程解析 一、原理简介 51 单片机内部有一个全双工串行接口。什么叫全双工串口呢?一般来说,只能接受或只能发送的称为单工串行;既可接收又可发送,但不能同时进行的称为半双工;能同时接收和发送的串行口称为全双工串行口。串行通信是指数据一位一位地按顺序传送的通信方式,其突出优点是只需一根传输线,可大大降低硬件成本,适合远距离通信。其缺点是传输速度较低。 与之前一样,首先我们来了解单片机串口相关的寄存器。 SBUF 寄存器:它是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据,可通过指令对SBUF 的读写来区别是对接收缓冲器的操作还是对发送缓冲器的操作。从而控制外部两条独立的收发信号线RXD(P3.0)、TXD(P3.1),同时发送、接收数据,实现全双工。 串行口控制寄存器SCON(见表1)。 表1 SCON寄存器 表中各位(从左至右为从高位到低位)含义如下。 SM0 和SM1 :串行口工作方式控制位,其定义如表2 所示。 表2 串行口工作方式控制位 其中,fOSC 为单片机的时钟频率;波特率指串行口每秒钟发送(或接收)的位数。 SM2 :多机通信控制位。该仅用于方式2 和方式3 的多机通信。其中发送机SM2 = 1(需要程序控制设置)。接收机的串行口工作于方式2 或3,SM2=1 时,只有当接收到第9 位数据(RB8)为1 时,才把接收到的前8 位数据送入SBUF,且置位RI 发出中断申请引发串行接收中断,否则会将接受到的数据放弃。当SM2=0 时,就不管第位数据是0 还是1,都将数据送入SBUF,并置位RI 发出中断申请。工作于方式0 时,SM2 必须为0。

单片机基础知识

1.一个完整的微机系统由硬件和软件两大部分组成 2.微型计算机的性能指标: 字长、运算速度、存储容量、软件配置、外设扩展能力 字:一组二进制数,字长:该二进制数的位数,字长越大,计算机处理数据越快运算速度:表达方式:cpu主频,越高,运算速度越快 存储容量:内存储容量(cpu直接访问存储器)、外存储容量(硬盘容量) 2.计算机系统:硬件系统(冯.诺依曼结构)(运算器、存储器、控制器、输入输出设备)、软件系统(运行程序和相应文档) 3.CPU主要组成部分:运算器、控制器 ALU运算器核心、累加器A、标志寄存器FR(C进、借位,OF溢出标志)、(不影响标志位CY的指令:INC A) 寄存器组RS、控制器CU(pc程序计算器、ir指令寄存器、id指令译码器) 4.存储器:RAM、ROM,其中RAM 具有易失性,常用于存储临时性数据 存储器的地址范围是0000H~0FFFH,它的容量为4KB(16*16*16=4*1024) 5.总线bus:传递信息的公共通信公道 片总线、内总线、外总线 地址总线(AB)、控制总线(CB)、数据总线(DB) 6.单片机(芯片)包括五部分:运算器、存储器、控制器、输入部分、输出部分8051:8位单片机 8031:复位后,PC和SP为:0000H、07H 7.二进制B、八进制O、十进制D、十六进制H 8.原码、反码、补码、压缩BCD码

9.单片机引脚: P1.0VCC(40引脚)P1.1P0.0 P1.2P0.1 P1.3P0.2 P1.4P0.3 P1.5P0.4 P1.6P0.5 P1.7P0.6 RST P0.7 RXD EA/VPP TXD ALE/PROG ITR0PSDE ITR1P2.7 T0P2.6 T1P2.5 WR P2.4 RD P2.3 XTAL2P2.2 XTAL1P2.1 GND P2.0(21引脚)

相关文档