[技术问答]

N79E815A单片机复位问题

[复制链接]
1226|18
手机看帖
扫描二维码
随时随地手机跟帖
听沙的声音|  楼主 | 2018-11-15 09:20 | 显示全部楼层 |阅读模式
请问各位大神,就是新塘N79E815A单片机我做的电路是按照标准电路搭的。请问我的程序里有关复位的程序都没写,其他比如MSP430我看别人是需要自己手动写程序关闭的,然后新塘单片机看门狗复位功能也需要手动写程序关闭吗?对单片机真的是小白一个,还请各位指教。还有我写的程序默认用的内部时钟22.1184MHZ,因为资料上如果硬件上是没有配置外部晶振,那么默认就是22.1184M内部时钟,那我烧程序时keil里的11.0592要换成22.1184吗

网上看到MSP430都需要手动关闭看门狗复位

网上看到MSP430都需要手动关闭看门狗复位

自己一上电就有5v的VDD提供给单片机

自己一上电就有5v的VDD提供给单片机
WEE8LWO[UFLC$)((2MJE6AK.jpg
xinpian101| | 2018-11-15 10:04 | 显示全部楼层
这个是51内核的不需要。如果有看门狗设置,可能是在配置字里,你看看这个芯片手册有没有配置字

使用特权

评论回复
xinpian101| | 2018-11-15 10:04 | 显示全部楼层
我只用过N76E003,那个是有配置字开启和关闭的,而不是在程序里操作。是要用烧录软件或者Keil烧录时候有个设置的地方。

使用特权

评论回复
xinpian101| | 2018-11-15 10:10 | 显示全部楼层
配置位(CONFIG)
N79E815A/814A/8132A具有硬件配置位,设定这些配置位可用于安全位,系统时钟位等等。这些硬件
配置位可通过编程器/烧录器或ISP 来配置。N79E815A/814A/8132A具有四个配置位,配置位0~3。有
些特定的配置位定义的功能也可以通过特定寄存器位重新配置。因此,需要加载这睦配置位到相应的寄
存器位。这些加载发生在复位之后。(软件复位会加载除CONFIG0.7的CBS位以外的所有配置位) 这些寄
存器位可以持续通过用户的软件控制。其他复位将不改变这些寄存器位的值。

使用特权

评论回复
xinpian101| | 2018-11-15 10:11 | 显示全部楼层
446325becd5ad007f5.png
在配置位3上设置的。

使用特权

评论回复
听沙的声音|  楼主 | 2018-11-15 13:42 | 显示全部楼层
我烧录器的配置位没有设置,是按照默认的。应该行把
)1)RUCDMYY@2)_ER9M7NZHM.jpg

使用特权

评论回复
jiekou001| | 2018-11-15 15:16 | 显示全部楼层
听沙的声音 发表于 2018-11-15 13:42
我烧录器的配置位没有设置,是按照默认的。应该行把

可以的,默认就行。干的漂亮,不太理解那些内容看手册。

使用特权

评论回复
听沙的声音|  楼主 | 2018-11-15 15:43 | 显示全部楼层
jiekou001 发表于 2018-11-15 15:16
可以的,默认就行。干的漂亮,不太理解那些内容看手册。


#include <stdio.h>
#include "N79E81x.h"
#include "Typedef.h"
#include "Define.h"
#include "Common.h"
#include "Delay.h"
#include "ISR.h"
#include "Version.h"
bit EA_Save_bit;
//-----------------------------------------------------------------------------------------------------------
void Interrupt_Error(void)
{
    while(1)
    {
        P07 = 1;
        Delay1ms(500);
        P07 = 0;
        Delay1ms(500);
    }
}
//-----------------------------------------------------------------------------------------------------------
void main(void)
{
    uint16_t i;
    InitialUART0_Timer1(9600);                  // 9600 Baud Rate @ 11.0592MHz
    Show_Version_Number_To_PC();
    printf ("\n*==========================================================================");
    printf ("\n*  N79E81x Series Interrupt Sample Code.");
    printf ("\n*==========================================================================\n");
    TR1 = 0;                                    //Stop Timer1 for Interrupt Demo

    IE   = 0x7F;
    EIE  = 0xFF;
    EA   = 1;

    //********************** INT0 Test ***********************
    P0 = 0xFF;
    IT0 = 1;

    set_IE0;                             // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x01)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //********************* Timer0 Test **********************
    P0 = 0xFF;

    set_TF0;                             // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x02)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //********************** INT1 Test ***********************
    P0 = 0xFF;
    IT1 = 1;

    set_IE1;                             // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x03)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //********************* Timer1 Test **********************
    P0 = 0xFF;

    set_TF1;                             // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x04)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //********************** UART0 Test **********************
    P0 = 0xFF;

    set_RI;                              // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x05)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //********************* Timer2 Test **********************
    P0 = 0xFF;

    set_TF2;                             // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode
    /* Check ISR return value */
    if(P0 != ~0x06)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //********************** I2C Test ************************
    P0 = 0xFF;

    set_SI;                              // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x07)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //********************** KBI Test ************************
    P0 = 0xFF;

    set_KBIF0;                           // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x08)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //********************** BOD Test ************************
    P0 = 0xFF;

    set_BOF;                             // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x09)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //********************** SPI Test ************************
    P0 = 0xFF;
                                         // Trigger Interrupt
    set_SPIF;

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x0A)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //******************* Watch Dog Test *********************
    P0 = 0xFF;

    set_WDTF;                            // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x0B)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //********************** ADC Test ************************/
    P0 = 0xFF;

    set_ADCI;                            // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x0C)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //******************** Capture Test **********************
    P0 = 0xFF;

    set_CAPF0;                           // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x0D)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time
    //********************** PWM Test ************************
    P0 = 0xFF;

    set_BKF;                             // Trigger Interrupt

    PCON |= SET_BIT0;                    // Enter Idle Mode

    if(P0 != ~0x0E)                      // Check ISR return value
        Interrupt_Error();
    for(i = 0 ; i < 60000 ; i++);        // Delay time

    EA = 0;                              // Disable all interrupt
    InitialUART0_Timer1(9600);           // 9600 Baud Rate @ 11.0592MHz
    printf("\nInterrupt Test OK!");
    while(1)
    {
        P14 = 1;
        P21 = 1;
        Delay1ms(500);
        P14 = 0;
        P21 = 0;
        Delay1ms(500);
    }
}
//-----------------------------------------------------------------------------------------------------------
void INT0_ISR(void) interrupt 0          // Vector @  0x03
{
    P0 = 0xFF-1;
    clr_IE0;
}
//-----------------------------------------------------------------------------------------------------------
void Timer0_ISR(void) interrupt 1        // Vector @  0x0B
{
    P0 = 0xFF-2;
    clr_TF0;
}
//-----------------------------------------------------------------------------------------------------------
void INT1_ISR(void) interrupt 2          // Vector @  0x13
{
    P0 = 0xFF-3;
    clr_IE1;
}
//-----------------------------------------------------------------------------------------------------------
void Timer1_ISR(void) interrupt 3        // Vector @  0x1B
{
    P0 = 0xFF-4;
    clr_TF1;
}
//-----------------------------------------------------------------------------------------------------------
void UART0_ISR(void) interrupt 4         // Vector @  0x23
{
    P0 = 0xFF-5;
    clr_RI;
}
//-----------------------------------------------------------------------------------------------------------
void Timer2_ISR(void) interrupt 5        // Vector @  0x2B
{
    P0 = 0xFF-6;
    clr_TF2;
}
//-----------------------------------------------------------------------------------------------------------
void I2C_ISR(void) interrupt 6           // Vector @  0x33
{
    P0 = 0xFF-7;
    clr_SI;
}
//-----------------------------------------------------------------------------------------------------------
void KBI_ISR(void) interrupt 7           // Vector @  0x3B
{
    P0 = 0xFF-8;
    clr_KBIF0;
}
//-----------------------------------------------------------------------------------------------------------
void BOD_ISR(void) interrupt 8           // Vector @  0x43
{
    P0 = 0xFF-9;
    clr_BOF;
}
//-----------------------------------------------------------------------------------------------------------
void SPI_ISR(void) interrupt 9           // Vector @  0x4B
{
    P0 = 0xFF-10;
    clr_SPIF;
}
//-----------------------------------------------------------------------------------------------------------
void WDT_ISR(void) interrupt 10          // Vector @  0x53
{
    P0 = 0xFF-11;
    clr_WDTF;
}
//-----------------------------------------------------------------------------------------------------------
void ADC_ISR(void) interrupt 11          // Vector @  0x5B
{
    P0 = 0xFF-12;
    clr_ADCI;
}
//-----------------------------------------------------------------------------------------------------------
void Capture_ISR(void) interrupt 12      // Vector @  0x63
{
    P0 = 0xFF-13;
    clr_CAPF0;
}
//-----------------------------------------------------------------------------------------------------------
void PWM_Brake_ISR(void) interrupt 14    // Vector @  0x73
{
    P0 = 0xFF-14;
    clr_BKF;
}
//-----------------------------------------------------------------------------------------------------------
嗯嗯,这是官网的中断程序,说实在话都没看懂,为什么在主函数里,他那个EA=1,后面又有EA=0,关掉中断,还有为什么要是P0=0xFF,然后每个中断服务程序里又是oxFF-X这种。我比如就是想P00为按键中断,还有它定义的那个延时,for()语句的延时具有什么功能,求指教

使用特权

评论回复
jiekou001| | 2018-11-15 16:25 | 显示全部楼层
那是让你通过P0端口显示不同组合知道发生了什么中断啊。

使用特权

评论回复
jiekou001| | 2018-11-15 16:27 | 显示全部楼层
关闭中断是让中断不再发生,你就可以观察P0端口的数据,比如你用了LED灯表示的,就可以看到刚才发生了什么中断了。

使用特权

评论回复
jiekou001| | 2018-11-15 17:47 | 显示全部楼层
那个是外部晶振的配置,如果不适用外部的,不用管就行了。

使用特权

评论回复
听沙的声音|  楼主 | 2018-11-15 18:18 | 显示全部楼层
jiekou001 发表于 2018-11-15 17:47
那个是外部晶振的配置,如果不适用外部的,不用管就行了。

谢谢,请问你说的外部晶振配置是哪条语句?这个用的是内部11.592M晶振的。还有我就是搞不明白为什么他要写TRO=1,就是让定时器1终止记时

使用特权

评论回复
评论
听沙的声音 2018-11-15 18:19 回复TA
说错了,他写的是TR1=0 
jiekou001| | 2018-11-15 18:25 | 显示全部楼层
听沙的声音 发表于 2018-11-15 18:18
谢谢,请问你说的外部晶振配置是哪条语句?这个用的是内部11.592M晶振的。还有我就是搞不明白为什么他要 ...

内部不是22M那个RC振荡器吗?那个软件勾选11.592那个意思是如果你用外部的11.592,才打钩。

使用特权

评论回复
听沙的声音|  楼主 | 2018-11-15 19:55 | 显示全部楼层
jiekou001 发表于 2018-11-15 18:25
内部不是22M那个RC振荡器吗?那个软件勾选11.592那个意思是如果你用外部的11.592,才打钩。 ...

那我就相当于keil编程时不需要在keil软件里勾选11.0592M,只需要在isp-icp烧录程序里默认就好?谢谢

使用特权

评论回复
mintspring| | 2018-11-15 20:35 | 显示全部楼层
我知道还有个单片机也是在配置字设置,PIC的

使用特权

评论回复
langziwuliao| | 2018-11-15 22:08 | 显示全部楼层
715是个好东西,可以加我QQ386923934提供支持

使用特权

评论回复
听沙的声音|  楼主 | 2018-11-15 22:11 | 显示全部楼层
mintspring 发表于 2018-11-15 20:35
我知道还有个单片机也是在配置字设置,PIC的

还有我想请问一下你们,我用的内部的22.1184做为时钟,至于想12分频那么应该如何设置,这资料看的让人有点懵。我是需要设置时钟分频寄存器吗?谢谢各位大神了
LB6VN5OVN2V~7E32K4)~T8L.jpg
IW`SB%CHTQJ}[LO78CNK7PH.jpg

使用特权

评论回复
听沙的声音|  楼主 | 2018-11-15 23:24 | 显示全部楼层
听沙的声音 发表于 2018-11-15 22:11
还有我想请问一下你们,我用的内部的22.1184做为时钟,至于想12分频那么应该如何设置,这资料看的让人有 ...

他这个12分频和4分频请问是在哪里设置
1{N1Q`8EIZRH[L70[}%TXJE.jpg

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

73

帖子

1

粉丝