C51 COMPILER V9.59.0.0 MAIN 06/10/2021 16:51:14 PAGE 1 C51 COMPILER V9.59.0.0, COMPILATION OF MODULE MAIN OBJECT MODULE PLACED IN .\list\main.obj COMPILER INVOKED BY: C:\Keil_v5\C51\BIN\C51.EXE main.c LARGE OMF2 OPTIMIZE(8,SPEED) BROWSE DEBUG PRINT(.\list\main.lst) -TABS(2) OBJECT(.\list\main.obj) line level source 1 /*---------------------------------------------------------------------*/ 2 /* --- STC MCU Limited ------------------------------------------------*/ 3 /* --- STC 1T Series MCU Demo Programme -------------------------------*/ 4 /* --- Mobile: (86)13922805190 ----------------------------------------*/ 5 /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ 6 /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ 7 /* --- Web: www.STCMCU.com --------------------------------------------*/ 8 /* --- Web: www.STCMCUDATA.com ---------------------------------------*/ 9 /* --- QQ: 800003751 -------------------------------------------------*/ 10 /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ 11 /*---------------------------------------------------------------------*/ 12 13 #include "config.h" 14 #include "STC8A_GPIO.h" 15 #include "STC8A_UART.h" 16 #include "STC8A_BMM.h" 17 #include "STC8A_NVIC.h" 18 19 /************* 功能说明 *************** 20 21 本程序演示BMM Memory to Memory数据转移. 22 23 设置2个存储器空间,一个发送一个接收,分别初始化2个存储器空间内容. 24 25 设置M2M BMM,上电后自动将发送存储里的内容写入到接收存储器空间. 26 27 根据不同的读取顺序、写入顺序,接收到不同的数据结果. 28 29 通过串口(P3.0,P3.1)打印接收存储器数据(上电打印一次). 30 31 用定时器做波特率发生器,建议使用1T模式(除非低波特率用12T),并选择可被波特率整除的时钟频率,以提高精度. 32 33 下载时, 选择时钟 22.1184MHz (可以在配置文件"config.h"中修改). 34 35 ******************************************/ 36 37 /************* 本地常量声明 **************/ 38 39 40 /************* 本地变量声明 **************/ 41 42 bit BmmM2MFlag = 0; 43 u8 xdata BmmTxBuffer[256]; 44 u8 xdata BmmRxBuffer[256]; 45 46 /************* 本地函数声明 **************/ 47 48 49 /************* 外部函数和变量声明 *****************/ 50 51 52 /******************** IO口配置 ********************/ 53 void GPIO_config(void) 54 { C51 COMPILER V9.59.0.0 MAIN 06/10/2021 16:51:14 PAGE 2 55 1 P3_MODE_IO_PU(GPIO_Pin_0 | GPIO_Pin_1); //P3.0,P3.1 设置为准双向口 56 1 } 57 58 /******************** UART配置 ********************/ 59 void UART_config(void) 60 { 61 1 COMx_InitDefine COMx_InitStructure; //结构定义 62 1 63 1 COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,U -ART_9bit_BRTx 64 1 COMx_InitStructure.UART_BRT_Use = BRT_Timer1; //使用波特率, BRT_Timer1, BRT_Timer2 (注意: 串口2固定使 -用BRT_Timer2) 65 1 COMx_InitStructure.UART_BaudRate = 115200ul; //波特率, 110 ~ 115200 66 1 COMx_InitStructure.UART_RxEnable = ENABLE; //接收允许, ENABLE或DISABLE 67 1 UART_Configuration(UART1, &COMx_InitStructure); //初始化串口 USART1,USART2,USART3,USART4 68 1 NVIC_UART1_Init(ENABLE,Priority_1); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Pri -ority_2,Priority_3 69 1 } 70 71 /******************** BMM 配置 ********************/ 72 void BMM_config(void) 73 { 74 1 BMM_M2M_InitTypeDef BMM_M2M_InitStructure; //结构定义 75 1 76 1 BMM_M2M_InitStructure.BMM_Enable = ENABLE; //BMM使能 ENABLE,DISABLE 77 1 BMM_M2M_InitStructure.BMM_Length = 127; //BMM传输总字节数 (0~255) + 1 78 1 79 1 // BMM_M2M_InitStructure.BMM_Tx_Buffer = BmmTxBuffer; //发送数据存储地址 80 1 // BMM_M2M_InitStructure.BMM_Rx_Buffer = BmmRxBuffer; //接收数据存储地址 81 1 // BMM_M2M_InitStructure.BMM_SRC_Dir = M2M_ADDR_INC; //数据源地址改变方向 M2M_ADDR_INC,M2M_ADDR_DEC 82 1 // BMM_M2M_InitStructure.BMM_DEST_Dir = M2M_ADDR_INC; //数据目标地址改变方向 M2M_ADDR_INC,M2M_ADDR_DEC 83 1 84 1 // BMM_M2M_InitStructure.BMM_Tx_Buffer = BmmTxBuffer; //发送数据存储地址 85 1 // BMM_M2M_InitStructure.BMM_Rx_Buffer = (u16)&BmmRxBuffer[255]; //接收数据存储地址 86 1 // BMM_M2M_InitStructure.BMM_SRC_Dir = M2M_ADDR_INC; //数据源地址改变方向 M2M_ADDR_INC,M2M_ADDR_DEC 87 1 // BMM_M2M_InitStructure.BMM_DEST_Dir = M2M_ADDR_DEC; //数据目标地址改变方向 M2M_ADDR_INC,M2M_ADDR_DEC 88 1 89 1 // BMM_M2M_InitStructure.BMM_Tx_Buffer = (u16)&BmmTxBuffer[255]; //发送数据存储地址 90 1 // BMM_M2M_InitStructure.BMM_Rx_Buffer = BmmRxBuffer; //接收数据存储地址 91 1 // BMM_M2M_InitStructure.BMM_SRC_Dir = M2M_ADDR_DEC; //数据源地址改变方向 M2M_ADDR_INC,M2M_ADDR_DEC 92 1 // BMM_M2M_InitStructure.BMM_DEST_Dir = M2M_ADDR_INC; //数据目标地址改变方向 M2M_ADDR_INC,M2M_ADDR_DEC 93 1 94 1 BMM_M2M_InitStructure.BMM_Tx_Buffer = (u16)&BmmTxBuffer[255]; //发送数据存储地址 95 1 BMM_M2M_InitStructure.BMM_Rx_Buffer = (u16)&BmmRxBuffer[255]; //接收数据存储地址 96 1 BMM_M2M_InitStructure.BMM_SRC_Dir = M2M_ADDR_DEC; //数据源地址改变方向 M2M_ADDR_INC,M2M_ADDR_DEC 97 1 BMM_M2M_InitStructure.BMM_DEST_Dir = M2M_ADDR_DEC; //数据目标地址改变方向 M2M_ADDR_INC,M2M_ADDR_DEC 98 1 99 1 BMM_M2M_Inilize(&BMM_M2M_InitStructure); //初始化 100 1 NVIC_BMM_M2M_Init(ENABLE,Priority_0,Priority_0); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0~P -riority_3; 总线优先级(低到高) Priority_0~Priority_3 101 1 } 102 103 /******************** task A **************************/ 104 void main(void) 105 { 106 1 u16 i; 107 1 108 1 GPIO_config(); 109 1 UART_config(); 110 1 BMM_config(); 111 1 EA = 1; 112 1 C51 COMPILER V9.59.0.0 MAIN 06/10/2021 16:51:14 PAGE 3 113 1 printf("STC8A8K64D4 Memory to Memory BMM Test Programme!\r\n"); //UART发送一个字符串 114 1 115 1 for(i=0; i<256; i++) 116 1 { 117 2 BmmTxBuffer[i] = i; 118 2 BmmRxBuffer[i] = 0; 119 2 } 120 1 BMM_M2M_TRIG(); //触发启动转换 121 1 122 1 while (1) 123 1 { 124 2 if(BmmM2MFlag) 125 2 { 126 3 BmmM2MFlag = 0; 127 3 128 3 for(i=0; i<256; i++) 129 3 { 130 4 printf("%02bX ", BmmRxBuffer[i]); 131 4 if((i & 0x0f) == 0x0f) 132 4 printf("\r\n"); 133 4 } 134 3 } 135 2 } 136 1 } 137 138 139 MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 289 ---- CONSTANT SIZE = 61 ---- XDATA SIZE = 512 19 PDATA SIZE = ---- ---- DATA SIZE = ---- ---- IDATA SIZE = ---- ---- BIT SIZE = 1 ---- EDATA SIZE = ---- ---- HDATA SIZE = ---- ---- XDATA CONST SIZE = ---- ---- FAR CONST SIZE = ---- ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)