简易波形的代码是不是有问题

是我的代码有问题吗?为什么放到proteus里面不出来我想要的波形?

#include "msp430f249.h"
#define CPU_F ((double)8000000)
#define delay_us(x)__delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x)__delay_cycles((long)(CPU_F*(double)x/1000.0))
//void sawtooth(void)
//{
//  char i;
//  P4OUT=i++;
//  delay_us(390);
//}

void triangular(void)
{
  char i;
  for(i=0;i<255;i++)
  {
    P4OUT=i;
    delay_us(195);
  }
  for(i=255;i>0;i--)
  {
    P4OUT=i;
    delay_us(195);
  }
}
void square(void)
{
  P4OUT=51;
  delay_ms(50);
  P4OUT=255;
  delay_ms(50);
}
void main(void)
{
  unsigned int i;
  WDTCTL=WDTPW+WDTHOLD;
  BCSCTL1&=~XT2OFF;
  do
  {
    IFG1&=~XT2OFF;
    for(i=0xff;i>0;i--);
  }
  while((IFG1 & OFIFG)!=0);
  BCSCTL2 |= SELM1;
   P4DIR=0XFF;
   while(1)
    {
     //sawtooth();
     triangular();
     square();
    }
}

P4上接了DAC?
triangular函数里面的i,不应该用char。 因为在这句 for(i=0;i<255;i++)里, char 永远满足 <255这个条件,第一个循环就跳不出去。
至少也该用unsigned char,保险点用int