diff --git a/cMIPS/serial.inp b/cMIPS/serial.inp
index a7519304fd7c1e28fa2c91d5919126d1bdf816c8..5427aab4c0e40ae492e818b23eed512213047e59 100644
--- a/cMIPS/serial.inp
+++ b/cMIPS/serial.inp
@@ -4,4 +4,3 @@ ffffffff
 7C2
 
 
-
diff --git a/cMIPS/tests/handlerUART.s b/cMIPS/tests/handlerUART.s
index a0a0e3b27246b92e82724d889feccf50630bf685..e88dce142ab9725cc49b3d62a3b538fae1fcc020 100644
--- a/cMIPS/tests/handlerUART.s
+++ b/cMIPS/tests/handlerUART.s
@@ -31,9 +31,14 @@ RX:
     nop
     sb    $k1, 0($a0)           # Put data on RX_queue tail
 
-    lui $a0, %hi(x_IO_BASE_ADDR)
-    ori $a0, $a0, %lo(x_IO_BASE_ADDR)
-    sw  $k1, 0($a0)               # Print for debug
+    # lui $a0, %hi(x_IO_BASE_ADDR)
+    # ori $a0, $a0, %lo(x_IO_BASE_ADDR)
+    # sw  $k1, 0($a0)               # Print for debug
+
+    lw    $k1, 0($a1)
+    j     RX
+    nop
+
 
 
 
@@ -75,5 +80,9 @@ TX:
     # ori $a0, $a0, %lo(x_IO_BASE_ADDR)
     # sw  $a1, 0($a0)               # Print for debug
 
+    lw    $k1, 0($a0)
+    j     RX
+    nop
+
 END:
 
diff --git a/cMIPS/tests/uart.c b/cMIPS/tests/uart.c
index 6ca6fd5557de91b3048098eccc27d984877ab456..b13652117b92b5b896dd8f210455abedd36480cc 100644
--- a/cMIPS/tests/uart.c
+++ b/cMIPS/tests/uart.c
@@ -56,7 +56,7 @@ int probetx(void);         // returns ntx
 int iostat(void);          // returns integer with status at lsb
 void ioctl(int);           // write lsb in control register
 char getc(void);           // returns char in queue, decrements nrx
-int Putc(char);            // inserts char in queue, decrements ntx
+void Putc(char);            // inserts char in queue, decrements ntx
 int ctoi(char);            // converts a character to an integer
 
 void initUd();
@@ -76,35 +76,27 @@ int main(){
     ctrl.ign   = 0;
     ctrl.intTX = 1;
     ctrl.intRX = 1;
-    ctrl.speed = 1;        // operate at 1/2 of the highest data rate
+    ctrl.speed = 2;        // operate at 1/2 of the highest data rate
     uart->cs.ctl = ctrl;
 
     initUd();
-    int lol;
     char last = EOF;
-    char first = EOF;
+    // FIXME: Não tah saindo do while (por causa do ctrl.intTX =1)
     while(!((c = getc()) == '\n' && c == last)) {
-        last = c;
-        print(c);
         if(c != EOF) {
-            if(!Putc(c)){
-                print(0);
-                while(!(TXempty&uart->cs.stat.s));
-                disableInterr();
-                first = Ud.tx_q[Ud.tx_hd];
-                Ud.tx_hd = (Ud.tx_hd+1)%16;
-                Ud.ntx++;
-                enableInterr();
-                uart->d.tx = first;
-                Putc(c);
-            }
+            print(c);
+            last = c;
+            Putc(c);
         }
     }
-    // for(i=0;i<Ud.ntx;i++){
-    //     print(Ud.tx_q[i]);
-    // }
-    // to_stdout('\n');
-    //uart->d.tx = '\n'; //Send STX (Start of Text)
+    if(Ud.ntx < 16){
+        disableInterr();
+        uart->d.tx = Ud.tx_q[Ud.tx_hd];
+        Ud.tx_hd = (Ud.tx_hd+1)%16;
+        Ud.ntx++;
+        enableInterr();
+    }
+    while(1);
     
     // while((c = getc()) != '\0') {
     //     if(c != EOF) {
@@ -148,16 +140,22 @@ char getc(){
     return c;
 }
 
-int Putc(char c){
+void Putc(char c){
     if(Ud.ntx > 0){
         disableInterr();
         Ud.tx_q[Ud.tx_tl] = c;
         Ud.tx_tl = (Ud.tx_tl+1)%16;
         Ud.ntx--;
         enableInterr();
-        return 1;
+    }else{
+        while(!(TXempty&uart->cs.stat.s));
+        disableInterr();
+        uart->d.tx = Ud.tx_q[Ud.tx_hd];
+        Ud.tx_hd = (Ud.tx_hd+1)%16;
+        Ud.ntx++;
+        enableInterr();
+        Putc(c);
     }
-    return 0;
 }
 
 int proberx(){