2019-06-04 14:25:11 u014798590 阅读数 767
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    4005 人正在学习 去看看 朱有鹏

光耦使用PC817(线性光耦,在这里足够),单片机配置为开漏,当呈现高阻态时,光耦不导通,NPN三极管8050基极无电压,不导通。
在这里插入图片描述

在这里插入图片描述

2020-01-18 22:21:43 Letmesuper 阅读数 12
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    4005 人正在学习 去看看 朱有鹏

单片机学习笔记来源于中国MOOC《单片机原理与应用》——北京交通大学

MCS-51单片机的结构与原理

结构:
·一个8位CPU;
·片内振荡和定时电路;
·128B内部RAM(00H~7FH);
·4个8位并行I/0口;
·2个16位可编程定时/计数器;
·一个全双工串行口;
·5个中断源(可编程为两个优先级);
·22个SFR(除PC外,其余21个分散在80H~FFH之间)
·堆栈深度可达80B(30H~7FH);
·16B(128位,20H~2FH)可位寻址区。

CPU内部结构:
1.算术逻辑运算单元ALU(8位)
+、-、×、÷算术运算,与、或、非、异或逻辑运算、循环移位、位处理。
2.寄存器阵列
(1)工作寄存器R0~R7(8位)
暂存运算数据和中间结果。
4个工作寄存器区,工作寄存器0区3区。每个区均含8个寄存器R0R7。
用PSW中的两位PSW.4和PSW.3来切换工作寄存器区,选用一个工作寄存器区进行读写操作。
(2)累加器Acc(8位)
需要ALU处理的数据和计算结果多数要经过A累加器。
(3)寄存器B(8位)
与A累加器配合执行乘、除运算。也可用作通用寄存器。
(4)程序状态字PSW(8位)
存放ALU运算过程的标志状态
Cy AC F0 RS1 RS0 OV —— P
(5)数据指针DPTR(16位)
存放片外存储器地址,作为片外存储器的指针。可分成两个8位寄存器DPH、DPL使用。
(6)堆栈指针SP(8位)
堆栈是按“先进后出”原则存取数据的存储区。
MCS—51堆栈设在片内RAM区。数据入栈/出栈时,SP自动加1/减1,其内容始终为栈顶地址。
复位时SP=07H。
(7)程序计数器PC(16位)
CPU总是按PC的指示读取程序。PC可自动加1.因此CPU执行程序一般是顺序方式。当发生转移、子程序调用、中断和复位等操作,PC被强制改写,程序执行顺序也发生改变。
复位时,PC=0000H。

程序存储器
·在MCS-51的指令系统仅有两条:
MOVC A, @A+DPTR
MOVC A, @A+PC
·复位后,程序计数器PC的内容为0000H
·MCS-51最多可外扩64K字节程序存储器

数据存储器
(1)从00H~1FH的32B单元是4个工作寄存器组。
(2)地址20H~2FH的16B共128位,是可位寻址的内部RAM区,它们既可字节寻址,亦可位寻址(P14表2-3)
(3)其他80B是只能按字节寻址的内部RAM区,为用户区。
·MCS-51单片机的堆栈安排在内部RAM内,堆栈的深度以不超过内部RAM的空间为限。

堆栈
堆栈是一种只允许在其一端进行数据插入和删除操作的一种数据结构。数据存取为“后进先出”。
堆栈功能:保护断点和现场信息。
堆栈的建立:MCS-51的堆栈是设置在内部RAM30H~7FH空间中,栈底为低地址单元,堆栈指针为SP。

特殊功能寄存器SFR
SFR区部分寄存器功能介绍如下:
·程序计数器(PC、16位):存放将要执行的指令地址。
·累加器(ACC、8位):存放数据或中间结果。
·B寄存器(8位):主要用于乘、除运算。
·数据指针(DPTR、16位):存放外部数据存储器的地址。
·程序状态字(PSW、8位):用于寄存程序运行的状态信息。

标志位功能:
CY:(1)执行算术运算时。最高位向前进位或借位时,CY为1;否则,CY为0。
(2)在位操作中,作“位”累加器。
AC:用于十进制调整。当低四位向高四位进位或借位时,AC为1;否则AC为0。
F0:供用户定义的标志位,可以用指令置位或复位,用以控制程序的转向。
OV:(1)在带符号数的加减运算中,结果产生溢出,OV=1;否则,OV=0。
(2)在乘法运算中,乘积超过255,OV=1,表示积存放在B与A中;否则,OV=0,表示积只存放在A中。
(3)在除法运算中,当除数为0时,OV=1,除法无意义。
P:累加器A中数的奇偶性,若A中“1”的个数为奇数,则P=1;否则,P=0。

对专用寄存器的两点说明
(1)单片机的22个专用寄存器中,有21个是可按字节寻址的(PC除外)。这些字节地址不连续的分散在内部RAM存储空间的高128B中,剩余的空间地址不允许用户使用。
(2)SFR只能使用直接寻址方式来访问它们,书写时既可使用寄存器名,也可使用寄存器单元地址。

具有位寻址能力专用寄存器
·在21个特殊功能寄存器中,有11个特殊功能寄存器具有位寻址能力,它们的字节地址正好能被8整除,其十六进制地址的末位,只能是0H或8H.

外部数据存储器
·MCS-51外部数据存储器寻址空间为64KB
·MCS-51同外部数据存储器的指令有4条:
MOVX A,@Ri
MOVX A, @DPTR
MOVX @Ri,A
MOVX @DPTR, A
R0,R1为8位寄存器,寻址范围256B
DPTR为16位的数据指针,寻址范围64KB。

I/O端口
·MCS-51有4个双向的8位并行I/O口:P0~P3
·每一个口都有一个8位的锁存器
·复位后它们的初始状态为全“1”
·P0是三态双向口:
既可作为并行I/O口,也可作为数据总线口。
当外部扩展了存储器或I/O端口,则只能作数据总线和地址总线低8位。
·P1口是专门供用户使用的I/O口,是准双向接口
·P2口试准双向接口,既可作为并行口I/O口,也可作为地址总线高8位口。当外部扩展了存储器或I/O端口,则只能作地址总线高8位
·P3口是准双向口,又是双功能口。该口的每一位均可独立地定义为第二功能,作为第一功能使用时,口的结构与操作与P1口相同。

I/O的接口要求与负载能力
P1,P2,P3口内部均有上拉电阻,当它们用作输入方式时,对应的口锁存器必须先“置”1

P0口内部没有上拉电阻,当它作为通用I/O时,外接上拉电阻,在用作地址/数据线时,不必外加上拉电阻。

P0口的每位输出可驱动8个LSTTL负载,P1-P3口可驱动4个LSTTL负载。

复位电路
·复位后PC值为0000H,故复位后的程序入口地址为0000H;
·复位后PSW=00H,使片内存储器中选择0区工作寄存器,用户标志为F0为0状态;
·复位后SP=07H,设定推栈栈底为07H;
·复位后P1,P2,P3口锁存器全为1状态,使这些准双向口皆处于输入状态;
·内部RAM不受复位的影响
复位电路的基本功能是:系统上电时提供复位信号,在加电瞬间,RST端出现一定时间的高电平,直至系统电源稳定后,撤销复位信号。

CPU时序
·MCS-51内部有一个用于构成振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。
·CPU执行一条指令的时间称为指令周期,它是以机器周期为单位的,MCS-51典型的指令周期为一个机器周期。
·每个机器周期由6个状态周期组成,每个状态周期由2个振荡周期组成,状态周期即S1、S2、S3、S4、S5、S6,而每个状态周期由两个节拍P1,P2组成。
·大多数8051指令执行时间为一个机器周期,MUL(乘法)和DIV(除法)需要4个机器周期。

CPU引脚功能
·双列直插式封装(DIP,Dual Inline Package)
·方形封装(PLCC,Plastic Leaded Chip Carrier)

引脚功能
1.端口线(4×8=32条)
1)P0.0-P0.7 2)P1.0-P1.7
3)P2.0-P2.7 4)P3.0-P3.7

2.电源线(2条):VCC为+5V电源线,VSS为地线
3.控制线(6条)
·ALE/PROG:地址锁存允许/编程线
·EA/VPP:允许访问片外存储器/编程电源线
·PSEN:片外ROM选通线
·RST/VPD:复位/备用电源线
·XTAL1和XTAL2:片内振荡电路输入/输出线

控制线
ALE/PROG:地址锁存允许/编程线
·配合P0口引脚的第二功能使用,用于把这个片外存储器低8位地址锁存到外部专用地址锁存器
·在不访问片外存储器时,MCS-51自动在ALE线上输出频率为fosc/6的脉冲序列。该脉冲序列可用作外部时钟源或作为定时脉冲源使用
·它可以在对8751片内EPROM编程/校验时传送5ms宽的负脉冲。
EA/VPP:允许访问片外存储器/编程电源线
·控制MCS-51使用片内ROM还是使用外ROM。
若=1,则允许使用片内ROM;
若=0,则只能使用片外ROM。
·对8751的EA/VPP用于 在片内EPROM编程/校验时输入21V或12.5V编程电源。

控制线
PSEN:片外ROM选通线
执行访问片外ROM的指令MOVC时,自动在线上产生一个负脉冲,用于为片外ROM芯片的选通(相当于读信号RD)。其他情况下,线均为高电平封锁状态。
RST/VPD:复位/备用电源线
·使CPU处于复位(及初始化)工作状态。复位上有电自动复位和人工按钮复位两种。
·RST/VPD的第二个功能是作为备用电源输入端。当主电源VCC,发生故障而降低到规定低电平时,RST/VPD线上的备用电源自动投入,以保证片内RAM中信息不丢失。

XTAL1和XTAL2:
片内振荡电路输入/输出线,这两个端子用来外接石英晶体和微调电容,即用来连接片内OSC的定时反馈回路。

单片机的工作方式
·复位方式
·程序执行方式
单步执行方式
连续执行方式
·节点方式
待机方式
掉电保护方式
·EPROM的编程和校验方式

复位方式
·单片机在开机时都需要复位,以便CPU以及其他功能部件都处于一个确定的初始状态,并从这个状态开始工作。
·RST引脚是复位信号的输入端
·复位信号是高电平有效,持续时间要有24个时钟周期以上。
·若时钟频率为12MHz,则复位脉冲宽度至少为2μS。
·单片机复位后,堆栈指针SP为07H、ALE、PSEN、P0、P1、P2、和P3口各引脚均为高电平,片内RAM中内容不变。

程序执行方式
1.单步执行方式
单步执行方式是指按一次单步执行键就执行一条用户指令的方式。
单步执行方式常常用于用户程序的调试。
单步执行方式是利用单片机外部中断功能实现的
2.连续执行方式
连续执行方式是单片机都需要的一种工作方式,被执行程序可以放在片内或片外ROM中,由于复位后程序计数器PC=0000H,可以预先在0000H处放一条转移指令,以便跳转到0000H~0FFFFH中的任何地方执行程序。

CHMOS型单片机低功耗工作方式
·CHMOS型的51单片机具有低功耗的特点
·两种节电工作方式:待机方式和掉电保护方式。
·待机方式和掉电方式都是由电源控制寄存器PCON的有关位来控制的。
SMOD:串行口波特率系数控制位;
PD:掉电方式控制位,PD=1,系统进入掉电保护方式;
IDL:待机方式控制位,IDL=1,系统进入待机方式。
待机方式
待机方式的进入:使用指令将PCON寄存器的IDL位置1即可。
·单片机进入待机方式时振荡器仍然运行
·CPU不工作
·通用寄存器都保持原有状态不变
退出待机方式的方法有两种:中断和硬件复位。
掉电保护方式
掉电保护方式的进入:使用指令将PCON寄存器的PD位置1即可。
·单片机的一切工作全部停止
·只有内部的RAM单元的内容被保护
·I/O引脚状态和相关的特殊功能寄存器的内容相对应
·ALE和为逻辑低电平。
推出掉电保护方式的方法只有一个:
硬件复位。复位后特殊功能寄存器的内容被初始化,但RAM的内容仍然保持不变。

编程和校验方式
编程:是指利用特殊手段对单片机片内EPROM进行写入的过程
校验:是对刚刚写入的程序代码进行读出验证的过程
单片机的编程和校验方式只有EPROM型器件才有,如8751这样的器件。

2006-07-12 15:31:00 denjackson 阅读数 4653
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    4005 人正在学习 去看看 朱有鹏

串口通讯一般需要单片机带串口通讯接口,而此类单片机一般较贵,可否用普通单片机做串口通讯?

答案是肯定的,但是,通常用于发送数据,接收数据相对就麻烦一些.

串口通讯的原理我就不讲了,各位可以去查询相关的书籍,以下是我做的用于IPOD控制的串口通讯程序.是用普通的PIC12F508单片机实现的.由于我比较穷,没有买IPOD,所以程序是否能正常运作并没有实践过,在此声明.此程序只做抛砖引玉之用.

 ;************************IPOD REMOTE CONTROL PORGRAM**********************************
;                   vcc +----V-----+ groud
;           PLAY/PAUSE  |       GP0|TxD--->IPOD
;                  VOL+ |       GP1|FORWARD>>
;                  VOL- |       GP2|REVERSE<<
;                       +----------+
;  4M InterOTC     1us/Instruction
;  9600bps  104us/bit    so 104 cycles/bit   only for G2 Spec
;  Rate is 19200 baud (52 cycles /bit @ 4M)  ||| for G3 Spec
;  8N1 DATA TRANS FORMAT  0 <--------> 1    (Startbit:0 + 1byte data+Stop bit:1)
;  Author: Deng Chunlin.by 2006-3-23.                   mailto: denjackson@163.com
;***************************************************************************************
   list      p=12f508           ; list directive to define processor
   #include <p12f508.inc>       ; processor specific variable definitions
   __CONFIG   _CP_ON & _WDT_OFF & _MCLRE_OFF & _IntRC_OSC

;*********************************
;define varibal and macro
;********************************
GPI0    EQU  6
TIMER0  EQU 1
STATUS  EQU 3
OSCCAL  EQU 5
w       EQU  H'0000'
f       EQU  H'0001'
Z       EQU  H'0002'
C       EQU  H'0000'
Tx      EQU  0
Fw      EQU  1
Rw      EQU  2
Vd      EQU  3
Vp      EQU  4
Pa      EQU  5
Txbyte  EQU  7H  ;Trans data register.
bitcnt  EQU  8H  ;Trans bit counts
temp    EQU  9H  ; delay temp varibal
temp2   EQU  10H ; delay temp varial2
Txipod1 EQU  11H ; command temp1
Txipod2 EQU  12H ; command temp2

;****************************************
   ORG 00H
   NOP
   movwf OSCCAL ;Enter Inter RC OSC Fix tax.
   MOVLW 07H     ;1:256 set to Timer0
   OPTION
   MOVLW B'00111110'     ;GP0 OUT,Other ports In
   TRIS 6
 ;  bcf GPIO,Tx
   goto main
;**********************SUB Program Area*******************************


;***********************delay sub program*******************************
;* delay sub program.
; Input register:temp
; cycles=3*x+2+2+2=3x+6.
;******************************************************************
UART_delay
     decfsz  temp,f            ;1/2 cycle
     goto UART_delay          ;2 cycles
     retlw 0                  ;2 cycles
;******************ipod putchar***************************************
;* ipod putchar
;* This subroutine transmits the byte stored in the "TXbyte" register
;*xxxx Rate is 9600 baud (=104 cycles/bit @ 4MHz) !!! from g2 spec!!
;* Rate is 19200 baud (52 cycles /bit @ 4M)  ||| for G3 Spec
;* input:     TXbyte
;* registers: bitcnt, TXbyte, temp
;* stack:     one level (UART_delay)
;******************************************************************************
iputchar
    movlw D'10'
    movwf bitcnt
iputchar0   
    comf Txbyte,f 
    setc   ;Set C=1
iputchar1    ;                                                ---         ---                       
    skpc  ; if C=1 then jump else c=0 then jump to iputchar2.  2           1
    goto iputchar2 ;                                                       2
    bcf GPIO,Tx  ; Send a '0'                                  1
    goto iputchar3 ;                                           2
iputchar2               
    bsf GPIO,Tx ; Send a '1'                                               1
    nop         ;                                                          1
iputchar3
    movlw D'14' ;                                              1           1
    movwf temp  ;                                              1           1
;---------------------------------------------------------------------------------
il  decfsz  temp,f   ;1/2      
    goto il          ;2
                     ;                                        42          42
;---------------------------------------------------------------------------------
    rrf Txbyte,f  ; >> right move a bit. f(0) to c.            1           1
    decfsz bitcnt,f ; 10 bits all are be sended?               1           1
    goto iputchar1 ;not, go on to send left bits.              2           2
    retlw 0
;*********************ipod_packet*************************************
;* G3 iPod output routine - ipod_packet
;*
;* Format:  output normally low
;*        | output high, 500 uSec
;*        | output message @ 8N1, 9600 baud, lsb first
;*        | output high 4 extra bits
;*    loop| low for ~11.16 mSec
;*
;*   VOL+             0x55 0x03 0x02 0x00 0x02 0xE9
;*   VOL-             0x55 0x03 0x02 0x00 0x04 0xF7
;*   SKIP>>           0x55 0x03 0x02 0x00 0x10 0xEB
;*   <<SKIP           0x55 0x03 0x02 0x00 0x08 0xF3
;*   PLAY/PAUSE       0x55 0x03 0x02 0x00 0x01 0xFA
;*   (button release) 0x55 0x03 0x02 0x00 0x00 0xFB
;*                                     Txipod1  Txipod2
;* input: TXipod1-2 has these bytes --------^^   ^^
;* stack: uses 2 stack locations (iputchar > UARTdelay)
;**********************************************************************
ipod_packet
   movlw 0       ;Stop bit.(inverted from 1 to 0)
   movwf Txbyte 
   movlw D'10'   ;send 10 stop bits(500us)??
   movwf bitcnt  ;1 start bit +8 data bits+1 stop bit=10 bits
   call iputchar2 ;alternate entry doesn't have start bit.
   movlw 055H
   movwf Txbyte
   call iputchar
   movlw 03H
   movwf Txbyte
   call iputchar
   movlw 02H
   movwf Txbyte
   call iputchar
   movlw 0
   movwf Txbyte
   call iputchar
  
   movf Txipod1,w
   movwf Txbyte
   call iputchar

   movf Txipod2,w
   movwf Txbyte
   movlw D'14'  ;1 startbit+8 data bits+1 stopbit+4 extra stop bits.
   movwf bitcnt
   call iputchar0
  
   bcf  GPIO,Tx ;bring back down to 0

   movlw D'14'          ;
   movwf temp2          ;
   movlw 0              ; 0-1,will be overflow to 255.
   movwf temp           ;  (774+3)*14~=11ms
lp1            ; delay about 11ms?
   call UART_delay      ; 256*3+6=774 clock.
   decfsz temp2,f       ;
   goto lp1             ;
   retlw 0
;*******************************************************************************
delay
     clrf TIMER0
d1s  MOVLW D'255' ;
     SUBWF TIMER0,w ;TIMER0
     BTFSS STATUS,Z ;
     GOTO d1s
     retlw 0
;************************main loop******************************************
;
;
;****************************************************************************
main
    call delay
    btfss GPIO,Fw
    goto fwd
    nop
    nop
    btfss GPIO,Rw
    goto rev
    nop
    nop
    btfss GPIO,Vd
    goto vdo
    nop
    nop
    btfss GPIO,Vp
    goto vpl
    nop
    nop
    btfss GPIO,Pa
    goto pypa
    nop
    goto main
   
  
fwd
    movlw 010H
    movwf Txipod1
    movlw 0EBH
    movwf Txipod2
    call ipod_packet
    btfss GPIO,Fw
    goto fwd
    goto rel  ;goto release....
rev
    movlw 08H
    movwf Txipod1
    movlw 0F3H
    movwf Txipod2
    call ipod_packet
    btfss GPIO,Rw
    goto rev
    goto rel  ;goto release....
vdo
    movlw 04H
    movwf Txipod1
    movlw 0F7H
    movwf Txipod2
    call ipod_packet
    btfss GPIO,Vd
    goto vdo
    goto rel  ;goto release....
vpl
    movlw 02H
    movwf Txipod1
    movlw 0E9H
    movwf Txipod2
    call ipod_packet
    btfss GPIO,Vp
    goto vpl
    goto rel  ;goto release....
pypa
    movlw 01H
    movwf Txipod1
    movlw 0FAH
    movwf Txipod2
    call ipod_packet
    btfss GPIO,Pa
    goto pypa
    goto rel  ;goto release....
rel
    movlw 0
    movwf Txipod1
    movlw 0FBH
    movwf Txipod2
    call ipod_packet
    goto main  
  
   end

 

2017-06-10 12:16:47 feijack 阅读数 1640
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    4005 人正在学习 去看看 朱有鹏

  

                                                               手机与单片机NFC通讯方案

方案简介:用户只需通过用单片机Uart串口控制NFC模块就能实现手机与单片机间数据传输。不需要了解NFC底层协议,迅速完成产品开发。

一、手机与单片机通讯框图


说明:用户只需要通过Uart接口控制NFC模块即可实现与单片机与手机批量数据透明传输

只要你会单片机串口编程,就能轻松实现NFC通讯,方便简单。

二、NFC模块介绍

        符合ISO14443-A协议,天线是板载天线,用户不需要自己搭配天线,直接通过串口控制操作、简单方便

        提供900字节用户存储空间,在系统不提供电源的情况下仍然可以通过刷卡读写操作。

        可以实现通过刷卡感应对外部提供1.53.3V电压

基本特征

Ø  射频工作频率:13.56MHz

Ø  通讯接口:Uart口,波特率115200,

Ø  供电电源:DC3.3V

Ø  模块尺寸:76mm*54mm

外观图片


电话:    15813726670

邮箱:    Stacy@yearay.com

QQ:        2425053909 (NFC模块)

NFC模块的命令、数据协议部分请参考《NFC主/从模块用户手册》

提供Android 手机端与单片机通讯的Demo供参考。

2018-05-02 22:40:08 dok12 阅读数 854
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    4005 人正在学习 去看看 朱有鹏

将编写好的程序烧录,烧录工具ISP,注意烧录时候蓝牙模块与单片机的P30,P31接口的杜邦线要取下来,烧录结束之后再插上杜邦线,不过这时候的TX,RX端的杜邦线必须对调。即TX ->p30,RX->P31

手机下载蓝牙串口APP,选择第一个安装

安装成功之后打开蓝牙连接HC06

设置好APP,如图,选择数据格式16进制

开始发送,接收到了数字8,同时单片机P0口流水灯按照预定计划显示。表明通讯成功

没有更多推荐了,返回首页