打印

新手请教 做硬件工程师 需要学c语言编程吗?

[复制链接]
12023|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hunter727|  楼主 | 2012-5-4 10:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
rt ,肯定会有大哥说学了当然好呀,不过我现在电路基础还比较薄弱,我是应该先继续学习硬件设计技术呢还是先学单片机C编程? 另外,以后的话,一般做硬件工程师需要掌握编程技术吗?有经验的硬件工程师分享一点经验。
ps 我现在能做一些比较简单的硬件设计,画原理图 pcb  调试 就是不会编程。

相关帖子

沙发
sioca| | 2012-5-4 11:13 | 只看该作者
一起学吧,都不难

使用特权

评论回复
板凳
airwill| | 2012-5-4 12:43 | 只看该作者
新手, 时间是资本: 什么人天生就会呢, 谁规定你就不能学编程呢?

使用特权

评论回复
地板
NE5532| | 2012-5-4 19:25 | 只看该作者
先学编程,因为容易上手,然后再边干边学硬件,再倒回去搞死那种只会写程序的。

使用特权

评论回复
5
Siderlee| | 2012-5-4 20:45 | 只看该作者
先学编程,因为容易上手,然后再边干边学硬件,再倒回去搞死那种只会写程序的。
NE5532 发表于 2012-5-4 19:25


这个。。。

使用特权

评论回复
6
Siderlee| | 2012-5-4 20:47 | 只看该作者
如果想做嵌入式工程师  硬件是必须的

如果是像开关电源那样的硬件工程师,可以不用学软件了  不过艺不压身。。。

使用特权

评论回复
7
hunter727|  楼主 | 2012-5-6 12:29 | 只看该作者
多谢楼上各位指教

使用特权

评论回复
8
nqyijian| | 2012-5-7 08:30 | 只看该作者
我感觉编程入个门比较容易,可以入门了再专攻硬件。这样软件上也能搞搞,硬件上也吃得开。毕竟硬件才是最耗时间,最需要积累的

使用特权

评论回复
9
dengwenlai| | 2012-5-8 19:58 | 只看该作者
先学软件,再学硬件。板子出来后,要跟着硬件学调试,慢慢的就会硬件了。但硬件要精通,必须要长期积累,多看多学才行。

使用特权

评论回复
10
王项电子| | 2012-5-8 20:25 | 只看该作者
我个人觉得有点电路硬件基础后开始学单片机C语言编程,因为单片机编程是根据硬件写的,懂得些硬件知识就会容易点。

使用特权

评论回复
11
dqyubsh| | 2012-5-8 23:26 | 只看该作者
我的体会是,嵌入式系统中的软件(固件)远比硬件设计费时费力,而且也比上位机的VC弄着费劲,学习时间太长了。尤其是DSP实时系统。。

使用特权

评论回复
12
maixy| | 2012-5-9 00:04 | 只看该作者
如果不会用C语言,怎么做用C语言读取数据的硬件芯片呢?
再说了,硬件也有它自身的硬件描述语言

使用特权

评论回复
13
leming1010| | 2012-5-9 08:46 | 只看该作者
想学软件,但不知道如何入手。简单的C会一点点。应该如何深入,却没有方向。比较迷茫。大家有那些书可以介绍。先说了。是自学的。没有人指导的。所以大家建议一些容易上手的书。谢谢。

使用特权

评论回复
14
yifeidengdai| | 2012-5-9 10:05 | 只看该作者
也是15楼的想法

使用特权

评论回复
15
mas888| | 2012-5-9 16:39 | 只看该作者
需要

使用特权

评论回复
16
TermyZhang| | 2012-7-15 10:20 | 只看该作者
C语言不难,特别对于学硬件的人,如果你觉得难,八成是CPU和内存的连接机制理解不透彻,它是指针的基础,而指针是C语言中最难的。
一定要提醒自己,学硬件一定要会C语言。否则,会为自己心里懒惰找到借口的。

使用特权

评论回复
17
shell.albert| | 2012-7-15 11:51 | 只看该作者
4# NE5532


:funk::funk::funk:

好不好别这样啊?搞死了他们,社会上又有一大群人下岗,会引起动荡不安。

使用特权

评论回复
18
analog_c| | 2012-7-15 15:47 | 只看该作者
一般的公司招硬件工程师 都写要熟悉c语言,虽然招进去用不到

使用特权

评论回复
19
ZYXUCBA| | 2012-7-15 20:29 | 只看该作者
要看你的工作性质,小公司要你全能,大公司要你搞一个方向但是要做精

使用特权

评论回复
20
小鞠| | 2014-1-6 16:11 | 只看该作者
大家好,我是单片机初学者,下面是我编的程序,不知道哪里有问题,正常上电应该LED闪亮,可是上电后却没有反应,因为我只是个实习生,还没有发表日志的权限,所以借用下贵楼主的宝地一用,请大家多多指教。
#include <reg51.h>
#include <string.h>
#include <intrins.h>
#include "IAP.H"


#define Time_Delay 3000 //ms 闪速延时

#define AddrEXT        255


sbit LED_OUT = P3^7;   //输出
sbit LED_1 = P1^2;            //指示灯
sbit LED_IN = P1^5;           //输入检测


bit kg = 0;

unsigned char Addr ;
unsigned char sendBuf[16];
unsigned char receBuf[16];

unsigned char receTimeOut = 0 ;
unsigned char receCount = 0 ;
unsigned char sendPosi = 0;
unsigned char sendCount        = 0 ;

unsigned int Delay_ns = 0;
bit Delay_ns_bit = 0;
bit Delay_1ms_bit = 0;
unsigned char Uart_ERR = 0;

unsigned char Uart_ERR_H = 0;
unsigned char Uart_ERR_L = 0;
unsigned char LED_in = 0;

void Uart_One_Init(void);                                   //串口1初始化
void send_str(unsigned char str[], unsigned char len);        //串口1发送一段字符
void CheckUart(void);


void Uart_One_Init(void)        //串口1初始化函数,波特率9600
{

    TMOD = 0x20; //设置定时器1为工作方式2(8位的常数自动重新装载的定时器/计数器)定时器0 工作方式1
    TH1 = 0xfd; //设置波特率为9600
    TL1 = 0xfd;
    TR1 = 1;
    REN = 1;
    SM0 = 0;
    SM1 = 1;
    EA = 1;
    ES = 1;
}


void Timer0Init(void)                //1毫秒@11.0592MHz
{
    TMOD &= 0xF0;                //设置定时器模式
    TMOD |= 0x01;                //设置定时器模式
    TL0 = 0x66;                //设置定时初值
    TH0 = 0xFC;                //设置定时初值
    TF0 = 0;                //清除TF0标志
    TR0 = 1;                //定时器0开始计时
    ET0 = 1;
}

void int_t0(void) interrupt 1 using 2//1ms
{
    TL0 = 0x66;                //设置定时初值
    TH0 = 0xFC;                //设置定时初值

    Delay_1ms_bit = 1;
    Delay_ns += 1;

    if(Delay_ns>Time_Delay)
    {
        Delay_ns = 0;
        Delay_ns_bit = 1;
    }
}



void main()                        //主函数
{
        Delay(10);
    Addr = IapReadByte(IAP_ADDRESS);
    if(Addr == 0xff)
    {
        Delay(10);
        IapEraseSector(IAP_ADDRESS);
        Delay(10);
        IapProgramByte(IAP_ADDRESS, 0x10);
        Delay(10);
        Addr = IapReadByte(IAP_ADDRESS);

    }


    Uart_One_Init();//串口1初始化
    Timer0Init();
   
    while(1)          //主循环体
    {

        LED_in = ~LED_IN;


        if(kg)          //关灯
        {
            LED_OUT = 0;           //大灯
            LED_1 = ~LED_OUT;   //小灯
                        Delay_ns = 0 ;
                        Delay_ns_bit = 1;
        }
        else
        {
            if(Delay_ns_bit) //开灯
            {
                Delay_ns_bit = 0;
                LED_OUT = ~LED_OUT;           //大灯
                LED_1 = ~LED_OUT;   //小灯
            }
        }
        if(Delay_1ms_bit)
        {
            Delay_1ms_bit = 0;
            if(receTimeOut > 0)
            {
                receTimeOut--;
                if(receTimeOut == 0 && receCount > 0)
                {
                    CheckUart();
                }
            }
        }
    }
}


void beginSend(void)
{
    sendPosi = 0;
    if(sendCount > 1)
        sendCount--;
    SBUF = sendBuf[0];
}


void Uart_One_Receive() interrupt 4
{
    unsigned char k = 0;

    if(TI)
    {
        TI = 0;
        if(sendPosi < sendCount)
        {
            sendPosi++;
            SBUF = sendBuf[sendPosi];
        }
        else
        {
            receCount = 0;  
        }
    }
    else if(RI)
    {
        RI = 0;
        receBuf[receCount] = SBUF;
        receCount++;
        receCount &= 0x0f;
        receTimeOut = 20;
    }
}

void CheckUart(void)
{
    unsigned char i;
    unsigned int tempData = 0;

    if((receBuf[6] == Addr) || (receBuf[6] == AddrEXT) )
    {

        for(i = 0; i < receBuf[3]-2; i++ )
        {
            tempData += receBuf[i];
        }

        if((receBuf[7] == (unsigned char )(tempData >> 8) ) && (receBuf[8] == (unsigned char)(tempData & 0xff) ) )
        {
            if((receBuf[0] == 0xcc) && (receBuf[1] == 0xcc) )
            {
                Uart_ERR_H = 0;
                Uart_ERR_L = 0;

                if(receBuf[2] == 0x4b )
                {
                    kg = 0 ;
                }
                else if (receBuf[2] ==0x47 )
                {
                    kg=1;
                    Uart_ERR_L=kg;
                }
                else if (receBuf[2]==0x43 )
                {
                    Uart_ERR_L = LED_in ;
                }
                else if (receBuf[2]==0x50 )
                {
                    kg = 1 ;
                }
                else if ((receBuf[2]==0x51 )&&(receBuf[6]==AddrEXT ))
                {
                    EA = 0;
                    Delay(10);
                    IapEraseSector(IAP_ADDRESS);
                    Delay(10);
                    IapProgramByte(IAP_ADDRESS, receBuf[5]);
                    Delay(10);
                    Addr = IapReadByte(IAP_ADDRESS);
                    EA = 1;
                }
                else if ((receBuf[2] == 0x52 )&&(receBuf[6] == AddrEXT ))
                {
                    Uart_ERR_L = Addr ;
                }
                else
                {
                    Uart_ERR_H = 1;
                }
            }
            else
            {
                Uart_ERR_H = 2;
            }
        }
        else
        {
            Uart_ERR_H = 3;
        }
        sendBuf[0] = 0xCC;
        sendBuf[1] = 0xCC;
        sendBuf[2] = receBuf[2];
        sendBuf[3] = 0x09;
        sendBuf[4] = Uart_ERR_H;
        sendBuf[5] = Uart_ERR_L;
        sendBuf[6] = Addr ;

        for(i = 0; i<(sendBuf[3]-2); i++ )
        {
            tempData += sendBuf[i];
        }
        sendBuf[7] = (unsigned char )(tempData >> 8);
        sendBuf[8] = (unsigned char)(tempData & 0xff);

        sendCount = 9;
        beginSend();
    }
    receCount = 0 ;
}

使用特权

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

本版积分规则

11

主题

119

帖子

0

粉丝