精华内容
下载资源
问答
  • STC15w4k32s4单片机 串口通信

    千次阅读 2020-01-13 11:15:00
    STC15W4K32S4系列单片机4个串行口 功能快捷键 撤销:Ctrl/Command + Z 重做:Ctrl/Command + Y 加粗:Ctrl/Command + B 斜体:Ctrl/Command + I 标题:Ctrl/Command + Shift + H 无序列表:Ctrl/Command + Shift...

    串行口

    STC15W4K32S4系列单片机有4个串行口,串行口1有4种工作方式,其中两种方式波特率可变,两种波特率固定。串行口2,3,4只有2种工作方式,均为波特率可变。

    UART1

    寄存器

    串行口控制寄存器(Serial Control Register)(可位寻址)

    SFR nameAddressbitB7B6B5B4B3B2B1B0
    SCON98HnameSM0/FESM1SM2RENTB8RB8TIRI
    • SM0/FE:当PCON中的SMOD0 = 0时,该位和SM1共同指定串行通信的工作方式
    SM0SM1工作方式功能说明
    00方式0同步移位串行方式
    01方式18位UART,波特率可变
    10方式29位UART
    11方式39位UART,波特率可变
    • SM2:方式2或方式3多机通信控制位 使用方式0,方式1时,该位应为0.
    • REN:允许禁止串行控制接收位
    • TB8:方式2或方式3中要发送的第九位数据 使用方式0,方式1时,该位不用
    • RB8:在方式2或方式3中为要接收的第九位数据 使用方式0,方式1时,该位不用
    • TI:发送中断请求标志位,方式0中发送数据第八位结束后,内部硬件自动置位,向cpu请求中断,响应中断后需软件清零。其他工作方式则在停止位开始发送时硬件置位,响应中断后需软件清零
    • RI:接收中断请求标志位,方式0中接收数据第八位结束后,内部硬件自动置位,向cpu请求中断,响应中断后需软件清零。其他工作方式则在接收到停止位的中间时刻硬件置位,向cpu请求中断,响应中断后需软件清零。

    电源控制寄存器(Power Control Register)(不可位寻址)

    SFR nameAddressbitB7B6B5B4B3B2B1B0
    PCON87HnameSMODSMOD0LVDFPOFGF1GF0PDIDL
    • SMOD:波特率选择位,SMOD = 1时;则使串行通信方式1,2,3的波特率加倍。
    • SMOD0:帧检测有效控制位,SMOD0 = 1时,SCON寄存器的SM0/FE位用于FE(帧错误检测)功能
    • 其他与UART1无关

    串行口数据缓冲寄存器(serial data buffer)

    • 两个数据缓冲器读SBUF 和 写SBUF共用一个地址

    辅助寄存器(Auxiliary Register)(不可位寻址
    定时器2配置

    SFR nameAddressbitB7B6B5B4B3B2B1B0
    AUXR8EHnameT0x12T1x12UART_M0x6TR2T2_C/~TT2x12EXTRAMS1ST2
    • 使用定时器1,2波特率发生器时需对该寄存器进行配置
    • T0x12:定时器0速度控制位 AUXR &= ~(1<<7);//12分频
    • T1x12:定时器0速度控制位 AUXR &= ~(1<<7);//12分频
    • T2R:定时器2允许控制位
    • T2_C/~T:控制定时器2用做定时器或计数器
    • T2x12:定时器2速度控制位 AUXR &= ~(1<<2);//12分频 AUXR |= (1<<2);//1分频
    • EXTRAM: 内部/外部RAM存取控制位 0允许,1禁止
    • S1ST2:UART1 选择T1,T2作为波特率发生器控制位 0:T1; 1:T2,此时T1释放,可以作为独立定时器使用。UART1默认选择T2作为波特率发生器

    定时器2的寄存器T2H, T2L

    • 用于保存重装时间常数。

    从机地址控制寄存器SADEN和SADDR

    • ???

    中断允许寄存器(可位寻址)

    SFR nameAddressbitB7B6B5B4B3B2B1B0
    IEA8HnameEAELVDEADCESET1EX1ET0EX0
    • EA:总中断控制允许位
    • ES:串行口中断控制允许位

    中断优先级控制寄存器可位寻址

    SFR nameAddressbitB7B6B5B4B3B2B1B0
    IPB8HnamePPCAPLVDPADCPSPT1PX1PT0PX0
    • PS:串行口中断优先级控制位 PS = 1;//最高优先级(优先级1)

    辅助寄存器AUXR1(P_SW1)(不可位寻址)
    UART1输出引脚配置

    MnemonicAddressnameB7B6B5B4B3B2B1B0
    AUXR1 P_SW1A2HAuxiliary register 1S1_S1S1_S0CCP_S1CCP_S0SPI_S1SPI_S00DPS

    Reset Value : 0000 0000
    *S1_S1与S1_S0选择串行口输出引脚。

    S1_S1S0_S0串行口在P1~P3之间来回切换
    00UART1在[P30/RxD][P31/TxD]
    01UART1在[P36/RxD_2][P37/TxD_2]
    10UART1在[P16/RxD_3/XTAL2][P17/TxD_3/XTAL1]需使用内部时钟
    11无效、

    时钟分频寄存器CLK_DIV
    中继广播方式设置

    MnemonicAddressnameB7B6B5B4B3B2B1B0
    CLK_DIV (PCON2)97HMCKO_S1MCKO_S0ADRJTx_RXMCLKO_2CLK_S2CLK_S1CLKS0

    *TxRx:中继广播方式设置位 ,为1时TxD管脚的对外输出实时反映RxD端口输入的电平状态。

    UART1 工作方式1配置

    
    #include<STC15Fxxxx.h>
    unsigned char  uart1busy = 0;
    unsigned char read_count = 0;
    unsigned char send_count = 0;
    char read[20];
    char send[20] = {"mou i chi do"};
    
    void Uart1_Init()
    {
    //串口配置
    	PS = 1; //高优先级中断
    	SCON = (SCON & 0x3f) | (1<<6) ;//工作方式1
    
    //定时器2配置
    	AUXR &= ~(1<<4); //关闭T2;
    	AUXR |= 0X01;//选择T2位UART1的波特率发生器
    	AUXR &= ~(1<<3);	//T2工作在定时模式
    	AUXR |=  (1<<2);	//1T不分频
    	TH2 = 0xFE>>8;// 1T 波特率=(SYSclk / (65536 - [RL_TH,RL_TL]))/4),12分频  /12
    	TL2 = 0XE0;     //11.0592M晶振 波特率
    	IE2  &= ~(1<<2);	//禁止T2中断
    	AUXR |=  (1<<4);;    //启动T2
    //串口配置	
    	P_SW1 = (P_SW1 & 0x3f) | (0x40 & 0xc0);//shiyong使用P36 P37引脚
    	CLK_DIV &= ~(1<<4); //串口1为正常工作模式,不中继
    	ES = 1;//串口1中断允许
    	EA = 1;//总中断允许	
    }
    void Usart1_sendchar(unsigned char usdata)
    {
    	while(uart1busy);
    	uart1busy = 1;
    	SBUF = usdata;
    	}
    void Usart1_sendstring(unsigned char *usdata,unsigned int slen)
    {
    	unsigned int len;
    	for(len=0;len<slen;len++)
    	 {
    	  Usart1_sendchar(usdata[len]);
    	  uart1busy = 0;
    	 }
    }
    
    void main(void)
    {
    	EA = 1;
    	Uart1_Init();
    	Usart1_sendstring(send,20);
    	while(1);
    }
    
    //中断函数
    void Uart1_int() interrupt 4
    {
    	if(RI)
    	{
    	RI = 0;
    	 read[read_count ++]= SBUF;
    		if(read_count >= 20)
    			read_count = 0;
    	}
    	if(TI)
    	{
    		TI = 0;
    		uart1busy = 0;
    	}
    }
    

    UART2

    • 对于15系列单片机而言,串行口2只能使用定时器2作为波特率发生器,不能选择其他定时器作为波特率发生器

    寄存器

    串行口2的控制寄存器S2CON(不可位寻址)

    • 只有2种工作方式,由 S2COMbit7 S2SM0 控制: =0,8位UART波特率可变。 =1,9位uart 波特率可变。
    • bit6保留,该位复位后为1
    • bit5 S2SM2
    • bit4 S2REN
    • bit3 S2TB8
    • bit2 S2RB8
    • bit1 S2TI
    • bit0 S2RI

    串行口2的数据缓冲寄存器S2BUF(不可位寻址)

    定时器2配置相关寄存器

    中断允许寄存器2 IE2(不可位寻址)

    • bit0 ES2

    EA = 1;

    外围设备功能切换控制寄存器2(P_SW2)(不可位寻址)
    UART2输出引脚配置

    • bit0 S2_S =0:[P1.0/RxD2,P1.1/TXD2]; =1:[P4.6/RxD2_2,P4.7/TXD2_2]

    配置和使用同UART1,波特率计算公式也一样。

    UART3

    串行口3默认选择定时器2为波特率发生器,也可以选择定时器3作为波特率发生器

    寄存器

    串行口3的控制寄存器S3CON(不可位寻址)

    • 只有2种工作方式,由 S3COMbit7 S3SM0 控制: =0,8位UART波特率可变。 =1,9位uart 波特率可变。
    • bit6 S3ST3 串行口3波特率发生器选择位 = 0:选择定时器二作为其波特率发生器; = 1:选择定时器3作为波特率发生器
    • bit5 S3SM2
    • bit4 S3REN
    • bit3 S3TB8
    • bit2 S3RB8
    • bit1 S3TI
    • bit0 S3RI

    串行口3的数据缓冲寄存器S3BUF(不可位寻址)

    T4T3M(不可位寻址)

    • bit3 T3R 定时器3运行控制位
    • bit2 T3_C/~T 定时器3用作定时器/计数器控制位
    • bit1 T3x12 定时器3是否分频控制位 =0:12分频;

    TH3,TL3

    IE2(不可位寻址)

    • bit5 ET3 定时器3的中断允许位
    • bit3 ES3 串行口3中断允许位

    IE: EA = 1;

    PSW_2(不可位寻址)
    UART3输出引脚配置

    • bit1 S3_S =0:[P0.0/RxD3,P0.1/TxD3] =1:[P5.0/RxD3_2,P5.1/TxD3_2]

    UART4

    串行口4默认选择定时器2为波特率发生器,也可以选择定时器4作为波特率发生器

    寄存器

    串行口4的控制寄存器S4CON(不可位寻址)

    • 只有2种工作方式,由 S4COMbit7 S3SM0 控制: =0,8位UART波特率可变。 =1,9位uart 波特率可变。
    • bit6 S4ST3 串行口3波特率发生器选择位 = 0:选择定时器二作为其波特率发生器; = 1:选择定时器4作为波特率发生器
    • bit5 S4SM2
    • bit4 S4REN
    • bit3 S4TB8
    • bit2 S4RB8
    • bit1 S4TI
    • bit0 S4RI

    串行口4的数据缓冲寄存器S4BUF(不可位寻址)

    T4T3M(不可位寻址)

    • bit7 T4R 定时器4运行控制位
    • bit6 T4_C/~T 定时器4用作定时器/计数器控制位
    • bit5 T4x12 定时器4是否分频控制位 =0:12分频;

    TH4,TL4

    IE2(不可位寻址)

    • bit6 定时器4的中断允许位
    • bit4 ES4 串行口4中断允许位

    IE: EA = 1;

    PSW_2(不可位寻址)
    UART3输出引脚配置

    • bit2 S3_S =0:[P0.2/RxD4,P0.3/TxD4] =1:[P5.2/RxD4_2,P5.3/TxD4_2]
    展开全文
  • STC15W4K32S4单片机ADC应用实现

    千次阅读 2019-05-16 19:20:41
    感谢北京化工大学何宾老师的课程指导,今天我们分享一个利用STC15W4K32S4单片机实现的ADC应用,我们通过ADC转换实现在LCD1602上显示学号,并能够通过外部中断0和外部中断1分别实现学号左移和右移的功能。 以下是...

    感谢北京化工大学何宾老师的课程指导,今天我们分享一个利用STC15W4K32S4单片机实现的ADC应用,我们通过ADC转换实现在LCD1602上显示学号,并能够通过外部中断0和外部中断1分别实现学号左移和右移的功能。

    以下是项目代码:

    1、lcd1602.h

    // 条件编译指令,如果未定义_1602_则定义_1602
    #ifndef _1602_
    #define _1602_
    
    // 引入头文件
    #include "reg51.h"
    #include "intrins.h"
    
    // 定义LCD引脚及寄存器地址
    sbit LCD1602_RS = P2^5; // 定义LCD1602_RS为P2.5引脚,RS=0表示传输的是控制指令,RS=1表示传输的是数据
    sbit LCD1602_RW = P2^6; // 定义LCD1602_RW为P2.6引脚,R/W=0表示读操作,R/W=1表示写操作
    sbit LCD1602_E  = P2^7; // 定义LCD1602_E 为P2.7引脚,E=1,单片机将数据放入数据线,一段时间后拉低,数据继续维持一段时间,即写入LCD中
    sfr  LCD1602_DB = 0x80; // 定义LCD1602_DB为P0端口
    sfr  P0M1       = 0x93; // 定义P0端口P0M1寄存器地址0x93
    sfr  P0M0       = 0x94; // 定义P0端口P0M0寄存器地址0x94
    sfr  P2M1       = 0x95; // 定义P2端口P2M1寄存器地址0x95
    sfr  P2M0       = 0x96; // 定义P2端口P2M0寄存器地址0x96
    
    // 申明函数
    void lcdwait();															// 等待LCD空闲函数
    void lcdwritecmd(unsigned char cmd);									// 写LCD命令函数
    void lcdwritedata(unsigned char dat);									// 写LCD数据函数
    void lcdinit();															// 初始化LCD函数
    void lcdsetcursor(unsigned char x, unsigned char y);					// 设定LCD光标位置函数
    void lcdshowstr(unsigned char x, unsigned char y, unsigned char *str);	// 打印字符串函数
    
    // 条件预编译指令结束
    #endif

    2、led1602.c

    // 引入头文件
    #include "led1602.h"
    
    // 实现函数
    /**
     * 函数名:lcdwait()
     * 参数  :无
     * 功能  :等待LCD空闲
     */
    void lcdwait() {
    	LCD1602_DB = 0xFF;			// 读取前,置P0端口为FF,引脚相当于悬空
    	_nop_();					// 空操作指令,延迟
    	_nop_();
    	_nop_();
    	_nop_();
    	LCD1602_RS = 0;				// 将RS信号拉低
    	LCD1602_RW = 1;				// 将RW信号拉高
    	LCD1602_E  = 1;				// 将E 信号拉高
    	while(LCD1602_DB & 0x80);	// 等待标志BF为低,即LCD空闲
        LCD1602_E  = 0;				// 将E 信号拉低
    }
    
    /**
     * 函数名:lcdwritecmd()
     * 参数  :cmd			控制指令码
     * 功能  :写LCD命令
     */
    void lcdwritecmd(unsigned char cmd) {
    	lcdwait();			// 等待LCD空闲
    	_nop_();
    	_nop_();
    	_nop_();
    	_nop_();
    	LCD1602_RS = 0;
    	LCD1602_RW = 0;
    	LCD1602_DB = cmd;	// 将控制指令码放到P0端口
    	LCD1602_E  = 1;
    	_nop_();
    	_nop_();
    	_nop_();
    	_nop_();
    	LCD1602_E  = 0;
    }
    
    /**
     * 函数名:lcdwritecmd()
     * 参数  :dat			数据码
     * 功能  :写LCD数据
     */
    void lcdwritedata(unsigned char dat) {
    	lcdwait();			// 等待LCD空闲
        _nop_();
    	_nop_();
    	_nop_();
    	_nop_();
    	LCD1602_RS = 1;
    	LCD1602_RW = 0;
    	LCD1602_DB = dat;	// 将数据码放到P0端口
    	LCD1602_E  = 1;
    	_nop_();
    	_nop_();
    	_nop_();
    	_nop_();
    	LCD1602_E  = 0;
    }
    
    /**
     * 函数名:lcdinit()
     * 参数  :无
     * 功能  :初始化LCD
     */
    void lcdinit() {
    	lcdwritecmd(0x38);	// 发指令0x38,2行模式,5x8点阵,8位宽度
    	lcdwritecmd(0x0c);	// 发指令0x0c,打开显示,关闭光标
    	lcdwritecmd(0x06);	// 发指令0x06,文字不移动,地址自动加1
    	lcdwritecmd(0x01);	// 发指令0x01,清屏
    }
    
    /**
     * 函数名:lcdsetcursor()
     * 参数  :x			在LCD上的列数
     *         y			在LCD上的行数
     * 功能  :设定LCD光标位置
     */
    void lcdsetcursor(unsigned char x, unsigned char y) {
    	unsigned char address;			// 存储器地址
    	if(y==0)						// 在第一行
    		address = 0x00 + x;
    	else							// 在第二行
    		address = 0x40 + x;
    	lcdwritecmd(address | 0x80);	// 写存储器地址指令
    }
    
    /**
     * 函数名:lcdshowstr()
     * 参数  :x			在LCD上的列数
     *         y			在LCD上的行数
     *         str			需要打印的字符串
     * 功能  :打印字符串
     */
    void lcdshowstr(unsigned char x, unsigned char y, unsigned char *str) {
    	lcdsetcursor(x, y);			// 设置光标位置
    	while((*str) != '\0') {		// 字符串未到结尾
    		 lcdwritedata(*str);	// 传送字符数据
    		 str++;					// 字符串地址自增
    	}
    }									

    3、main.c

    // 引入头文件
    #include "reg51.h"
    #include "stdio.h"
    #include "led1602.h"
    
    #define ADC_POWER     0x80		// 定义ADC_POWER  的值为0x80
    #define ADC_FLAG      0x10		// 定义ADC_FLAG   的值为0x10
    #define ADC_START     0x08		// 定义ADC_START  的值为0x08
    #define ADC_SPEEDLL   0x00		// 定义ADC_SPEEDLL的值为0x00
    #define ADC_SPEEDL    0x20		// 定义ADC_SPEEDL 的值为0x20
    #define ADC_SPEEDH    0x40		// 定义ADC_SPEEDH 的值为0x40
    #define ADC_SPEEDHH   0x60		// 定义ADC_SPEEDHH的值为0x60
    
    sfr AUXR      = 0x8E;			// 申明AXUR寄存器的地址为0x8E
    sfr ADC_CONTR = 0xBC;			// 申明ADC_CONTR控制寄存器的地址为0xBC
    sfr ADC_RES   = 0xBD;			// 申明ADC_RES结果寄存器的地址为0xBD
    sfr ADC_RESL  = 0xBE;			// 申明ADC_RESL结果寄存器的地址为0xBE
    sfr P1ASF     = 0x9D;			// 申明P1ASF模拟功能控制寄存器的地址为0x9D
    
    // 在外部数据区定义变量,用于存储学号
    xdata long  num1 _at_ 0x100;	// 定义长整形变量num1
    xdata float num2 _at_ 0x120;	// 定义浮点数变量num2
    
    unsigned char ch = 4;
    bit flag = 1;					// ADC转换完成标识
    unsigned char tstr[50];			// 数据存储缓冲器
    
    /**
     * 函数名:delay
     * 参数  :n			延迟时间长度,单位毫秒
     * 功能  :延时指定的毫秒时间
     */
    void delay(unsigned int n) { 
    	unsigned int i, j; 
    	for(i = n; i > 0; i--) {
    		for(j = 114; j > 0; j--);
    	}		
    }
    
    /**
     * 函数名:adc_int
     * 参数  :无
     * 功能  :ADC中断响应函数
     */
    void adc_int() interrupt 5 {
    	unsigned char i = 0;
    	ADC_CONTR &= !ADC_FLAG;									// 将ADC_FLAG标志清零
    	num1 = 2016014446;
    	num2 = 2016014446;
    	sprintf(tstr + 10, "%lld", num1);						// 将数据传送至缓冲区
    	flag = 1;												// ADC转换完成
    	ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;	// 启动ADC
    }
    
    /**
     * 函数名:move_left
     * 参数  :无
     * 功能  :外部中断0中断响应函数,实现学号在LCD上左移
     */
    void move_left() interrupt 0 {
    	unsigned char i;
    	for(i = 0; i < 11; i++){
    		lcdwritecmd(0x01);								// 清屏
    		lcdwait();										// 等待LCD空闲
    		lcdshowstr(0, 0, tstr+10+i);					// 右移数组地址,写字符串
    		lcdwait();
    		delay(3000);									// 延时等待
    	}
    }
    
    /**
     * 函数名:move_right
     * 参数  :无
     * 功能  :外部中断1中断响应函数,实现学号在LCD上右移
     */
    void move_right() interrupt 2 {
    	unsigned char i;
    	for(i = 6; i < 17; i++){
    		lcdwritecmd(0x01);								// 清屏
    		lcdwait();										// 等待LCD空闲
    		lcdshowstr(i, 0, tstr+10);						// 右移光标位置,写字符串
    		lcdwait();
    		delay(3000);									// 延时等待
    	}
    }
    
    /**
     * 函数名:main
     * 参数  :无
     * 功能  :主函数,在LCD上打印学号,响应中断
     */
    void main() {
    	unsigned int i, k;
    	P0M0 = 0;		// 通过P0M0和P0M1寄存器将P0口定义为准双向(双向IO),弱上拉(上拉电阻很大,提供的驱动电流很小,叫弱上拉)
    	P0M1 = 0;
    	P2M0 = 0;		// 通过P2M0和P2M1寄存器将P2口定义为准双向,弱上拉
    	P2M1 = 0;
    	P1ASF = 0xFF;	// 将P1端口用于ADC输入
    	ADC_RES = 0;	// 将ADC_RES寄存器清零
    	ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;	// 配置ADC_CONTR寄存器
    	for(i = 0; i < 10000; i++);
    	IE = 0xA0;		// 允许ADC中断
    	lcdwait();		// 等待LCD空闲
    	lcdinit();		// 初始化LCD
    	IT0 = 1;		// 开启外部中断0和外部中断1
    	EX0 = 1;
    	IT1 = 1;
    	EX1 = 1;
    	EA  = 1;
    	while(1) { 
    		if(flag == 1) {
    			flag = 0;
    			for(k = 0; k < 16; k++) {// 循环打印学号
    				lcdwritecmd(0x01);
    				lcdwait();
    				lcdshowstr(k, 0, tstr+10);
    				if(k > 6)
    					lcdshowstr(0, 0, tstr+26-k);
    				lcdwait();
    				delay(500);
    			}
    		}
    	}
    }
    

    有关讲解的视频欢迎关注我们的公众号:落饼枫林,查看历史推送:STC15W4K32S4单片机ADC应用实现。

    想要学习更多单片机的知识也欢迎参加何老师在爱课程网站上的单片机原理及应用的课程:https://www.icourse163.org/learn/BUCT-1205804839#/learn/announce

    展开全文
  • STC15W4K32S4中文手册

    2018-03-17 09:20:00
    STC15W4K32S4中文手册,KEIL编程使用.STC15W4K32S4中文手册,KEIL编程使用.
  • 《单片微型计算机原理与接口技术:基于STC15W4K32S4单片机》从微型计算机的基础知识和基本工作原理入手,重点介绍单片微型计算机内部各模块的功能结构、工作原理、接口电路和应用编程等内容,在编写中尽可能地结合...

    《单片微型计算机原理与接口技术:基于STC15W4K32S4单片机》从微型计算机的基础知识和基本工作原理入手,重点介绍单片微型计算机内部各模块的功能结构、工作原理、接口电路和应用编程等内容,在编写中尽可能地结合目前工程应用中常用的新技术、新知识和新方法,力求做到学以致用。

    全书共分为12章,第1~2章介绍了微机系统的基础知识和组成结构;第3~4章介绍了STC15W4K系列单片机的内部结构及指令系统;第5章介绍了单片机的C语言程序设计;第6~12章介绍了单片机各模块的结构原理及应用。每章均配套有习题与思考题,所有实例均经调试通过。为了便于读者自学,《单片微型计算机原理与接口技术:基于STC15W4K32S4单片机》在第12章还分别介绍了与教材配套的开发板设计方法和STC15W4K单片机学习板设计方法,并在附录B中提供了单片机学习板的电路图,供读者选择使用。

    《单片微型计算机原理与接口技术:基于STC15W4K32S4单片机》内容丰富、层次分明、结构合理,可以作为普通高校计算机类、电子信息类和电气自动化类等专业的教学用书,还可以作为高职院校以及培训班的教材,同时也可作为大学生各类创新创业竞赛和单片机应用工程师的参考书。 第1章 微型计算机基础知识

    第2章 微型计算机的组成结构

    第3章 单片微型计算机的结构及原理

    第4章 指令系统和汇编语言

    第5章 单片机的C语言程序设计

    第6章 单片机存储器的应用

    第7章 单片机的中断系统

    第8章 定时/计数器与可编程计数器陈列PCA

    第9章 单片机的数据通信

    第10章 单片机的人机交互

    第11章 单片机的A/D与D/A转换

    第12章 单片机的应用系统设计

    附录A ASCII码表及扩展ASCII码表

    附录B STC15W4K单片机学习板参考线路图

    参考文献

    内容简介:

    《单片微型计算机原理与接口技术:基于STC15W4K32S4单片机》从微型计算机的基础知识和基本工作原理入手,重点介绍单片微型计算机内部各模块的功能结构、工作原理、接口电路和应用编程等内容,在编写中尽可能地结合目前工程应用中常用的新技术、新知识和新方法,力求做到学以致用。

    全书共分为12章,第1~2章介绍了微机系统的基础知识和组成结构;第3~4章介绍了STC15W4K系列单片机的内部结构及指令系统;第5章介绍了单片机的C语言程序设计;第6~12章介绍了单片机各模块的结构原理及应用。每章均配套有习题与思考题,所有实例均经调试通过。为了便于读者自学,《单片微型计算机原理与接口技术:基于STC15W4K32S4单片机》在第12章还分别介绍了与教材配套的开发板设计方法和STC15W4K单片机学习板设计方法,并在附录B中提供了单片机学习板的电路图,供读者选择使用。

    《单片微型计算机原理与接口技术:基于STC15W4K32S4单片机》内容丰富、层次分明、结构合理,可以作为普通高校计算机类、电子信息类和电气自动化类等专业的教学用书,还可以作为高职院校以及培训班的教材,同时也可作为大学生各类创新创业竞赛和单片机应用工程师的参考书。

    目录:

    第1章 微型计算机基础知识

    第2章 微型计算机的组成结构

    第3章 单片微型计算机的结构及原理

    第4章 指令系统和汇编语言

    第5章 单片机的C语言程序设计

    第6章 单片机存储器的应用

    第7章 单片机的中断系统

    第8章 定时/计数器与可编程计数器陈列PCA

    第9章 单片机的数据通信

    第10章 单片机的人机交互

    第11章 单片机的A/D与D/A转换

    第12章 单片机的应用系统设计

    附录A ASCII码表及扩展ASCII码表

    附录B STC15W4K单片机学习板参考线路图

    参考文献

    展开全文
  • 第一版 单片微机原理与接口技术——基于STC15W4K32S4系列单片机 丁向荣 电子课件
  • [单片微机原理与接口技术——基于STC15W4K32S4系列单片机][丁向荣] [程序源代码] 解压密码 dxrcch
  • Porteus库中也没有stc15w4k32s4系列单片机啊,该怎么办?
    Porteus库中也没有stc15w4k32s4系列单片机啊,该怎么办?
    展开全文
  • STC15W4K32S4接口技术

    2019-02-12 21:55:58
    STC15W4K32S4系列单片机STC增强型8051单片机最新技术结晶,宽电源电压(2.4~5.5V),无须转换芯片可直接与PC机USB接口进行通信;增强型8051单片机集成了上电复位电路与高精准R/C振荡器,给单片机芯片加上电源就可...
  • 带目录标签的版本,介绍如何在Keil中开发 STC15W4K 系列,其中包括IAP15W4K
  • STC15W4K32S详细资料

    2018-10-29 13:57:39
    STC15W4K32S单片机详细资料 管脚排列、I/O口功能说明等 STC官方资料
  • ADC——基于STC15W4K32S4

    千次阅读 2020-06-04 17:11:46
    文章目录ADC——基于STC15W5K32S4一、逼近式ADC原理二、STC15W4K32S4单片机的A/D结构与A/D相关的寄存器1.P1口模拟功能控制寄存器P1ASF2. ADC控制寄存器ADC_CONTR3. ADC转换结果调整寄存器位——ADRJ4.A/D转换结果...
  • STC15W4K32S4系列单片机串口学习

    千次阅读 2019-05-12 11:45:19
    4种模式 定时器1 2种模式:16位/8位自动重装载 定时器2 固定为16位自动重装载 定时器3 固定为16位自动重装载 定时器4 固定为16位自动重装载 串口1 定时器2(default)、定时器1 4种模式 串口2 定时器2...
  • STC15W4K32S4系列与STC15F/L2K60S2系列单片机的区别    
  • STC15W4K32S4系列概述及寄存器简介

    千次阅读 2021-03-13 15:08:18
    STC15W4K32S4系列的单片机集成了一组(各自独立6路)增强型的PWM波形发生器。PWM波形发生器内部有一个15位的PWM计数供6路PWM使用,用户可以设置每路PWM的初始电平。另外,PWM波形发生器为每路PWM又设计了两个控制波形...
  • } void Mode_IO() //设置STC15单片机端口IO模式,准双向IO模式 { P0M0=0; P0M1=0; P1M0=0; P1M1=0; P2M0=0; P2M1=0; P3M0=0; P3M1=0; } void KeyDis() //矩阵按键处理函数程序 { uchar temp0,temp1,temp2,...
  • STC15W4K32S系列 低速模式

    千次阅读 2016-03-16 09:25:51
    STC15W4K32S4系列 低速模式相关
  • 第一版 单片微机原理与接口技术——基于STC15W4K32S4系列单片机 丁向荣 电子课件
  • 一,打开文件(可以随文下载放置在...四,编辑main.c 代码如Proteus8.9 VSM Studio SDCC编译器仿真STC15W4K32S4系列003_Keys (如下图6所示) 图6 五,Main.c 代码: /* Main.c file generated by New Project wizard *
  • STC15W4K32S4 ADC

    千次阅读 2020-01-15 11:38:53
    STC15系列单片机adc由多路选择开关,比较器,逐次比较寄存器,10位dac,转换结果寄存器(ADC_RES与ADC_RESL)以及ADC_CONTR(ADC控制寄存器构成) 寄存器 P1口模拟控制寄存器(P1ASF)(不可位寻址)(只写寄存器,读无效) ...
  • 一,打开文件(可以随文下载放置在...四,编辑main.c 代码如Proteus8.9 VSM Studio SDCC编译器仿真STC15W4K32S4系列002_USART+74s164 (如下图6所示) 图6 五,Main.c 代码: /* Main.c file generated by New Project
  • 一,打开文件(可以随文下载放置...四,编辑main.c 代码如Proteus8.9 VSM Studio SDCC编译器仿真STC15W4K32S4系列001_跑马灯(如下图6所示) 图6 五,Main.c 代码: /* Main.c file generated by New Project wizard *Au
  • 基于STC15W5K32S4实验箱,用红外遥控,PS2游戏手柄,ADC矩阵键盘来实现一些小项目合集(计算器、遥控画线、弹一弹、俄罗斯方块、短动画等) 二、设计原理 1 实验器材 本综合设计用到STC15W5K32S4实验箱、红外遥控、...
  • stc15w4k32s4_lsm9ds1_spi.rar

    2021-09-05 01:01:15
    利用STC单片机SPI方式驱动LSM9DS1获取A/G/M信息
  • 一,打开文件(可以随文下载放置在...四,编辑main.c 代码如Proteus8.9 VSM Studio SDCC编译器仿真STC15W4K32S4系列013_iic_02_AT24C04 (如下图6所示) 图6 五,Main.c 代码: /* Main.c file generated by New Projec
  • 一,打开文件(可以随文下载放置在...四,编辑main.c 代码如Proteus8.9 VSM Studio SDCC编译器仿真STC15W4K32S4系列013_iic_01_AT24C02 (如下图6所示) 图6 五,Main.c 代码: /* Main.c file generated by New Projec
  • 一,打开文件(可以随文下载放置在...四,编辑main.c 代码如Proteus8.9 VSM Studio SDCC编译器仿真STC15W4K32S4系列013_iic_10_AT24C1024 (如下图6所示) 图6 五,Main.c 代码: /* Main.c file generated by New Proj

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 160
精华内容 64
关键字:

stc15w4k32s4单片机