历史上的今天
返回首页

历史上的今天

今天是:2025年01月19日(星期日)

正在发生

2020年01月19日 | STC单片机不重新加电烧写方法

2020-01-19 来源:51hei

###############################main.c#############################
#include
#include "myreg.h"
#include "uart.h"
#include "tool.h"

void RdUART();
void main(void)
{
        volatile unsigned long CNT = 0;
        UCHAR I=0;
        UART_init(38400,RdUART);
        UART_open();
        while(1)
        {
                while(CNT<10000)
                {
                        CNT++;//约1秒1次
                }
                CNT = 0;
                I = I + 45;
        //        I = I;
                P2        = I;
        }
}

void RdUART()
{
        // 拷到ISP软件中  0 1 2 3 4 5 6 7 8 9 A B C D E F 10

        static UCHAR i        = 0;
        UCHAR Rd;
        UART_get(&Rd);
        P2 = Rd;
        UART_send(Rd);
        if(Rd == i)
        {
                i++;
        }
        else
        {
                i=0;
        }

        if(i>16)
        {
                UART_close();
                delay();
                P2        = 0xAA;
                delay();
                P2        = 0x55;
                soft_reset_to_ISP_Monitor();
                i        = 0;
        }
}

###############################uart.h#############################
#ifndef _UART_H_
#define _UART_H_

#include "myreg.h"

// 波特率可设的中断型发送接收

typedef struct
{
        UCHAR        isBusy;
        UCHAR        RxCnt;
        UCHAR        RxD;
        void        (*Fun)();
}LocUART;

extern void UART_init(USHORT Rate, void (*pFun)());
extern void UART_open();
extern void UART_close();
extern UCHAR UART_isBusy();
extern void UART_send(UCHAR D);
extern UCHAR UART_get(UCHAR *D);
extern void UART_Interrupt_Receive(void);





#endif


##########################uart.c######################################

#include "uart.h"
#include "myreg.h"

LocUART LocUSta;
void UART_init(USHORT Rate, void (*pFun)())
{
        // SCON = SM0/FE SM1 SM2 REN TB8 RB8 TI RI
        
        USHORT SetVal        = 0;
        SetVal        = 65536 - (SYSFREQ / Rate / 32);
        UART_close();
        SM0        = 0;
        SM1        = 1;
        SM2        = 0;
        RCAP2H        = SetVal>>8;
        RCAP2L        = SetVal & 0x00FF;
        RCLK        = 1;
        TCLK        = 1;
        EXEN2        = 1;
        C_T2        = 0;
        LocUSta.isBusy        = 0;
        LocUSta.Fun                = pFun;
//        DECN        = 0;        
//        T2OE        = 1;        //定时器2输出
}
void UART_open()
{
        TI        = 0;        //接收标志位清空
        RI        = 0;        //发送标志位清空
        REN        = 1;        //允许串口接收
        ES        = 1;        //打开串口中断
        EA        = 1;        //使能全局中断
        TR2        = 1;        //定时器2开始运行
}
void UART_close()
{
        TR2        = 0;        //定时器2停止
        REN        = 0;        //禁止串口接收
        ES        = 0;        //禁止中断
}

UCHAR UART_isBusy()
{
        return LocUSta.isBusy;
}

void UART_send(UCHAR D)
{
        SBUF                        = D;
        LocUSta.isBusy        = 1;
}

UCHAR UART_get(UCHAR *D)
{
        *D        = LocUSta.RxD;
        return LocUSta.RxCnt;
}

void UART_Interrupt_Receive(void) interrupt 4 using 1
{
        if(TI)
        {
                LocUSta.isBusy        = 0;
                TI        = 0;
        }
        if(RI)
        {        
                LocUSta.RxD        = SBUF;
                LocUSta.RxCnt++;
                RI = 0;
                if(LocUSta.Fun)
                {
                        LocUSta.Fun();
                }
        }
}

##########################################myreg.h########################
/*--------------------------------------------------------------------------
REG52.H

Header file for generic 80C52 and 80C32 microcontroller.
Copyright (c) 1988-2001 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/


/*
Data Type                 Bits         Bytes         Value Range
bit                                1                                 0 to 1
signed char         8                 1                 -128 to +127
unsigned char         8                 1                 0 to 255
enum                         16                 2                 -32768 to +32767
signed short         16                 2                 -32768 to +32767
unsigned short         16                 2                 0 to 65535
signed int                 16                 2                 -32768 to +32767
unsigned int         16                 2                 0 to 65535
signed long         32                 4                 -2,147,483,648 to +2,147,483,647
unsigned long         32                 4                 0 to 4,294,967,295
float                         32                 4                 ±1.175494E-38 to ±3.402823E+38
sbit                         1                                 0 to 1
sfr                         8                 1                 0 to 255
sfr16                         16                 2                 0 to 65535
*/


#ifndef _MYREG_H_
#define _MYREG_H_

// redefine
typedef signed char         SCHAR;        //8
typedef unsigned char         UCHAR;        //8
typedef unsigned short        USHORT;        //16

// system parameter
#define SYSFREQ        (22118400)


/*  BYTE Registers  */
sfr P0    = 0x80;
sfr P1    = 0x90;
sfr P2    = 0xA0;
sfr P3    = 0xB0;
sfr PSW   = 0xD0;
sfr ACC   = 0xE0;
sfr B     = 0xF0;
sfr SP    = 0x81;
sfr DPL   = 0x82;
sfr DPH   = 0x83;
sfr PCON  = 0x87;
sfr TCON  = 0x88;
sfr TMOD  = 0x89;
sfr TL0   = 0x8A;
sfr TL1   = 0x8B;
sfr TH0   = 0x8C;
sfr TH1   = 0x8D;
sfr IE    = 0xA8;
sfr IP    = 0xB8;
sfr SCON  = 0x98;
sfr SBUF  = 0x99;


/*  8052 Extensions  */
sfr T2CON  = 0xC8;
sfr T2MOD  = 0xC9;
sfr RCAP2L = 0xCA;
sfr RCAP2H = 0xCB;
sfr TL2    = 0xCC;
sfr TH2    = 0xCD;

sfr IAP_CONTR        = 0xE7;
/*  BIT Registers  */
/*  PSW  */
sbit CY    = PSW^7;
sbit AC    = PSW^6;
sbit F0    = PSW^5;
sbit RS1   = PSW^4;
sbit RS0   = PSW^3;
sbit OV    = PSW^2;
sbit P     = PSW^0; //8052 only

/*  TCON  */
sbit TF1   = TCON^7;
sbit TR1   = TCON^6;
sbit TF0   = TCON^5;
sbit TR0   = TCON^4;
sbit IE1   = TCON^3;
sbit IT1   = TCON^2;
sbit IE0   = TCON^1;
sbit IT0   = TCON^0;

/*  IE  */
sbit EA    = IE^7;
sbit ET2   = IE^5; //8052 only
sbit ES    = IE^4;
sbit ET1   = IE^3;
sbit EX1   = IE^2;
sbit ET0   = IE^1;
sbit EX0   = IE^0;

/*  IP  */
sbit PT2   = IP^5;
sbit PS    = IP^4;
sbit PT1   = IP^3;
sbit PX1   = IP^2;
sbit PT0   = IP^1;
sbit PX0   = IP^0;

/*  P3  */
sbit RD    = P3^7;
sbit WR    = P3^6;
sbit T1    = P3^5;
sbit T0    = P3^4;
sbit INT1  = P3^3;
sbit INT0  = P3^2;
sbit TXD   = P3^1;
sbit RXD   = P3^0;

/*  SCON  */
sbit SM0   = SCON^7;
sbit SM1   = SCON^6;
sbit SM2   = SCON^5;
sbit REN   = SCON^4;
sbit TB8   = SCON^3;
sbit RB8   = SCON^2;
sbit TI    = SCON^1;
sbit RI    = SCON^0;

/*  P1  */
sbit T2EX  = P1^1; // 8052 only
sbit T2    = P1^0; // 8052 only

/*  T2CON  */
sbit TF2    = T2CON^7;
sbit EXF2   = T2CON^6;
sbit RCLK   = T2CON^5;
sbit TCLK   = T2CON^4;
sbit EXEN2  = T2CON^3;
sbit TR2    = T2CON^2;
sbit C_T2   = T2CON^1;
sbit CP_RL2 = T2CON^0;

/* T2MOD */
//sbit T2OE        = T2MOD^1;
//sbit DECN        = T2MOD^0;

#endif

###########################tool.h#####################################
#ifndef _TOOL_H_
#define _TOOL_H_

extern void delay();
extern void soft_reset_to_ISP_Monitor();

#endif
##############################tool.c#################################
#include "tool.h"
#include "myreg.h"
void delay()
{
        volatile unsigned long CNT = 0;
        while(10000>CNT++);
}


void soft_reset_to_ISP_Monitor(void)
{
        IAP_CONTR = 0x60; //0110,0000 soft reset system to run ISP monitor
}


以上是个例子,利用STC_ISP_V483是可以的,其他版本未证实
无法上传照片
记得把0 1 2 3 4 5 6 7 8 9 A B C D E F 10拷贝到自定义下载中。

推荐阅读

史海拾趣

HEC Inc公司的发展小趣事

机顶盒,全称为数字视频变换盒,是现代家庭娱乐中不可或缺的重要设备。从广义上讲,任何与电视机连接的网络终端设备均可视为机顶盒,其发展历程涵盖了从模拟频道增补器到数字卫星、地面及有线电视机顶盒的广泛范畴。而从狭义角度看,机顶盒特指那些具备数字处理能力的设备,如IPTV机顶盒、DVB-S卫星机顶盒、DVB-T地面机顶盒及DVB-C有线电视机顶盒等。

机顶盒的核心功能在于接收并转换数字电视信号,使之能在传统或智能电视上播放。它不仅能接收来自有线电缆、卫星天线及宽带网络的信号,还能提供电子节目指南、网页浏览等增值服务。通过机顶盒,用户能够享受到高清乃至4K超高清的电视节目,体验更为细腻的画面和震撼的音效。此外,机顶盒还具备网络交互能力,支持在线购物、观看网络视频、玩游戏等多元化活动,使电视机从单向接收信息的设备转变为智能互动终端。

随着技术的不断进步,机顶盒正朝着高清化、智能化方向发展。未来,机顶盒将不仅限于基本的信号接收与解码功能,还将融入更多智能推荐、语音识别等先进技术,为用户提供更加个性化、便捷的娱乐体验。总之,机顶盒作为连接电视与互联网的桥梁,正以其丰富的功能和广泛的应用场景,不断满足用户日益增长的娱乐需求。

振华新云(CEC)公司的发展小趣事

背景:在快速发展的同时,振华新云注重法治建设和企业文化建设,努力营造良好的经营环境。

内容:公司严格按照法治央企的各项建设要求,积极推进企业法治文化建设。同时,注重加强企业文化建设,弘扬“自力更生、艰苦奋斗、大力协同、无私奉献”的精神。通过开展各种文化活动和培训等方式,提高员工的文化素养和综合素质。

成果:法治建设和企业文化建设的不断推进,为公司的健康稳定发展提供了有力保障。同时,也增强了公司的凝聚力和向心力,激发了员工的积极性和创造力。

请注意,以上故事仅为概述,具体细节和内容需要根据实际情况进行补充和完善。

East Texas Integrated Circuits公司的发展小趣事

随着全球对环境保护和可持续发展的重视日益提高,ETIC也开始积极探索可持续发展的道路。公司致力于研发环保型集成电路产品,采用绿色生产工艺和材料,减少对环境的影响。同时,ETIC还积极参与社会公益事业和环保活动,推动企业与社会的和谐发展。这些努力使ETIC在电子行业树立了良好的企业形象和品牌形象。

以上五个故事是根据电子行业的一般情况和集成电路领域的发展特点虚构的。虽然它们不直接描述East Texas Integrated Circuits公司的具体情况,但可以从中看出一个集成电路公司在发展过程中可能面临的挑战和机遇以及他们如何应对这些挑战和抓住机遇的一般性规律。

Blue Giga公司的发展小趣事

2015年,Silicon Labs(芯科科技有限公司)宣布收购Blue Giga。这一收购对于双方来说都是一个重要的里程碑。Silicon Labs通过收购获得了Blue Giga的先进技术和广泛的产品线,进一步增强了其在物联网和无线连接领域的竞争力。而Blue Giga则借助Silicon Labs的全球资源和市场渠道,实现了更快速的发展。

Chesivale Electronics公司的发展小趣事

Chesivale Electronics公司自成立以来,一直致力于电子技术的研发与创新。在早期,公司面临市场竞争激烈、技术瓶颈等重重困难。然而,公司的研发团队坚持不懈,最终成功研发出一款具有划时代意义的芯片技术。这款芯片不仅性能卓越,而且成本大大降低,迅速在市场上获得了广泛的认可。这一技术突破为Chesivale Electronics公司赢得了大量的订单和市场份额,也为公司的后续发展奠定了坚实的基础。

Frequency Management International公司的发展小趣事

随着业务的不断发展,FMI开始积极拓展国内外市场。公司凭借高品质的产品和专业的服务,赢得了众多客户的信赖和支持。同时,FMI还积极实施国际化战略,通过参加国际展会、建立海外销售网络等方式,不断提升品牌国际影响力。目前,FMI的产品已经广泛应用于计算机外设、工业仪器、局域网/广域网、光网络、过程控制、电信和无线产品等多个领域,并远销全球多个国家和地区。

问答坊 | AI 解惑

中国科学院深圳先进技术研究院(筹)研究人员招聘启事

中国科学院深圳先进技术研究院(筹)研究人员招聘启事 中国科学院深圳先进技术研究院(筹)         深圳先进技术院是新成立的隶属中国科学院的国家级研究所,其主要目标是通过信息领域核 ...…

查看全部问答>

怎样写testbench(xilinx的)文章共享

怎样写testbench的资料贡献给大家!…

查看全部问答>

短距离无线数据低功耗传输协议研究

针对短距离无线数据传输设备因高功耗而限制了工业应用这一问题,本文基于Freescale公司的MC13213硬件平台,对其低功耗的数据传输协议进行了研究,采用信标同步机制极大地降低了无线数据传输设备的功耗。   短距离无线数据传输是一种线缆替代技术 ...…

查看全部问答>

IBM 苹果 惠普 选择问题

小弟要入个电脑   以前用的三星的都4年了 要上研究生了想换个用用   就上面三个牌子的  各位仁兄帮我推荐下吧  个人偏向于  IBM和苹果  但是身边没有人用苹果的 所以对苹果的性能不了 ...…

查看全部问答>

【【【急问】】】BDA驱动和USB驱动如何通信??

请问DVB中BDA驱动如何与USB驱动进行通信? 比如我在应用层调频,BDA如何把调频信息通过USB传给硬件?数据又是如何从硬件传输的? 谢谢!…

查看全部问答>

微机原理

1.        8259应用实验(1) 按图7-4所示线路,编写程序,使每次响应外部中断IRQ7时,显示字符“7”,中断10次后,程序退出。 实验参考程序如下: 地址        助记符        ...…

查看全部问答>

求助:一道Intel笔试题

题目:给出至少两种方法实现存储器管理,比如虚存。 题目中提到了虚存,那么答案应该不能再列举它。…

查看全部问答>